SQL Server: Raiserror where @variable = true



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

我在尝试什么:

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

我已经声明并赋值了变量

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

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

不能像sql查询那样使用。这是一个命令,所以你可以写为

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

关于条件检查的结构,这里的其他答案都是正确的,但是根据文档,我建议您使用THROW而不是RAISERROR。微软文档https://learn.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数据类型来实现相同的目标,如果可能的话。

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

当然,Microsoft文档建议使用throw代替raiserror。

然而,Erland Sommarskog,一个微软MVP,有一个非常开明的博客,在他的错误和事务处理文章的第2部分中讨论了THROW做的事情很少会引起错误,它需要一个分号,这可能会被遗忘。因此,我强烈建议坚持使用危险性较小的raiserror