我正在为一些存储过程添加一些验证,并且需要检查某些变量是否为空(它们在存储过程的早期填充)。
我一直试图在if语句中添加“throw”,如下所示:
IF (@val is null)
BEGIN
THROW 50001, 'Custom text', 1
END
这会导致“throw”出现语法错误,因为它在throw之前在if语句中查找其他代码,但我只需要它在if语句中执行throw。
我需要尽可能保持存储过程尽可能快地执行。
有没有人有任何想法?
答案 0 :(得分:37)
出现语法错误,因为之前的语句尚未终止。其他答案都可以,但是为了这样做,你可以在THROW之前抛出一个分号,或者养成用分号终止所有语句的习惯。
IF (@val is null)
BEGIN
;THROW 50001, 'Custom text', 1
END
或
IF (@val is null)
BEGIN;
THROW 50001, 'Custom text', 1;
END;
您可能已经注意到:
IF (@val is null)
THROW 50001, 'Custom text', 1
...也可以工作,这是因为SQL Server知道IF语句之后的下一件事总是新的T-SQL语句。
值得注意的是,微软已声明未来的T-SQL语言在每个语句后都需要分号,所以我的建议是现在开始养成习惯。
答案 1 :(得分:1)
DECLARE @val NVARCHAR(50) = NULL
IF @val is null
RAISERROR('Custom text', 16,16)
不同级别 检查
答案 2 :(得分:0)
如果这是针对SQL Server的,则intellisense语法高亮显示器不喜欢它,但代码应该编译并运行正常。当然,由于它是单个语句,您根本不需要BEGIN
... END
块:
IF (@val is null) THROW 50001, 'Custom text', 1