SQL Server:Raiserror 其中@variable = true

Posted

技术标签:

【中文标题】SQL Server:Raiserror 其中@variable = true【英文标题】:SQL Server: Raiserror where @variable = true 【发布时间】:2021-10-27 08:36:50 【问题描述】:

我似乎无法解决这个问题。如果变量为真,我想杀死我的脚本。但到目前为止我找不到任何答案。

我正在尝试什么:

raiserror('Error', 18, -1)
Where @Variable='True';

我已经声明并分配了变量

【问题讨论】:

RAISERROR 不是SELECT。语法为documented。你不能在语句上粘贴任意的WHERE 子句,但你可以使用IF 【参考方案1】:

raiseerror 是一个 T-SQL 命令。它没有where 子句,但你可以将它放在if 块中:

IF @Variable = 'True'
    raiserror('Error', 18, -1)

【讨论】:

【参考方案2】:

你不能像 sql 查询那样使用它。它是命令,所以你可以写成

IF @Variable = 'True'
BEGIN
    raiserror('Error', 18, -1);
END

【讨论】:

【参考方案3】:

这里的其他答案关于条件检查的结构是正确的,但我会建议您使用THROW 而不是RAISERROR,基于文档。微软的文档https://docs.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql?view=sql-server-ver15

IF @Variable = 'True'
BEGIN
   THROW 50000, 'Error', 1;
END

而且,顺便说一句,您应该强烈考虑不要在代码中使用诸如“true”或“false”之类的文本文字,而是尽可能选择BIT 数据类型来实现相同的效果。

【讨论】:

【参考方案4】:

我想在这里反驳paneerakbari的建议。

当然,Microsoft 文档建议使用 throw 而不是 raiserror。

但是,Microsoft MVP Erland Sommarskog 在Part 2 of his Error and Transaction Handling article 中讨论了 THROW 所做的事情比 raiserror 少,它需要一个分号,这可能会被危险地遗忘。因此,我强烈建议坚持使用不太危险的raiserror

【讨论】:

以上是关于SQL Server:Raiserror 其中@variable = true的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较

从 SQL Server 8 到 11 的 RAISERROR 转换

SQL Server ->> THROW字句对比RAISERROR字句

Sql server抛出异常(RAISERROR)

从 .NET 中的 SQL Server 捕获 RAISERROR

过程中的 Raiserror (SQL Server 2014) 无法捕获客户端 (c#)