DECLARE @false bit = 0;
IF @false
xxxx;
在 SQL Server 的存储过程中,如果您声明一个位变量,将其设置为 0,并且从不更改它,那么当它在 IF 中使用时,例如IF @false
,编译器会简单地忽略这些代码块,还是总是评估布尔表达式和分支?答案将确定我的所有调试日志记录代码是否需要注释掉才能用于生产。
DECLARE @false bit = 0;
IF @false
xxxx;
在 SQL Server 的存储过程中,如果您声明一个位变量,将其设置为 0,并且从不更改它,那么当它在 IF 中使用时,例如IF @false
,编译器会简单地忽略这些代码块,还是总是评估布尔表达式和分支?答案将确定我的所有调试日志记录代码是否需要注释掉才能用于生产。
SQL Server 编译器会非常快地执行此变量声明值检查,并且您不会注意到任何性能差异。
只要不对任何表评估这些额外/不需要的变量,它就不应该对性能产生任何明显的影响。
附带说明一下,如果不需要,最好的做法是将其取出或按照您的建议将其注释掉。
还需要根据 0 或 1 评估 SQL Server BIT 变量,例如
DECLARE @false bit = 0;
IF (@false = 0)
BEGIN
PRINT 'xxxx';
END
如果您尝试像在 c# 中那样评估位变量
IF (@false) --<-- This will error out
xxxx;
从实验中,我得出的结论是,实际上存在性能下降,尽管是微不足道的。通过执行许多“IF @false = 1 xxx;” 在时间检查之间的语句,我确定编译器不够聪明,即使 @false 永远不会是 1,以排除这些语句。添加许多额外的“IF @false = 1 xxx;” 报表进一步增加了小延迟。因此,我将注释掉这些陈述。