[英]SQL only a throw inside if statement
我正在为一些存储过程添加一些验证,并且需要检查某些变量是否为空(它们在存储过程的早期填充)。
我一直试图在if语句中添加一个“throw”,如下所示:
IF (@val is null)
BEGIN
THROW 50001, 'Custom text', 1
END
这会导致“throw”出现语法错误,因为它在throw之前查找if语句中的其他代码,但我只需要它在if语句中执行throw。
我需要保持存储过程尽可能轻,以尽可能快地执行。
有没有人有任何想法?
语法错误显示,因为前一个语句尚未终止。 其他答案也可以,但是为了这样做你可以在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语言在每个语句后都需要分号,所以我的建议是现在开始养成习惯。
DECLARE @val NVARCHAR(50) = NULL
IF @val is null
RAISERROR('Custom text', 16,16)
进行不同级别的检查
如果这是针对SQL Server的,那么intellisense语法高亮显示器不喜欢它,但代码应该编译并运行正常。 当然,由于它是单个语句,您根本不需要BEGIN
... END
块:
IF (@val is null) THROW 50001, 'Custom text', 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.