繁体   English   中英

SQL只在if语句中抛出

[英]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)

进行不同级别的检查

http://msdn.microsoft.com/en-us/library/ms164086.aspx

如果这是针对SQL Server的,那么intellisense语法高亮显示器不喜欢它,但代码应该编译并运行正常。 当然,由于它是单个语句,您根本不需要BEGIN ... END块:

IF (@val is null) THROW 50001, 'Custom text', 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM