sql中的速记IF语句

Ale*_*lex 5 sql sql-server

目前我有一个存储过程,它接受一个字符串

@vari as varchar(30)
if @vari is null 
    SELECT * FROM TABLE 
else 
    SELECT * FROM TABLE WHERE col = @vari
endif
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以内联if语句,从而不会因为1个参数而声明2个选择?

Nik*_*vić 15

SELECT * FROM TABLE WHERE (@vari is null or col = @vari)
Run Code Online (Sandbox Code Playgroud)

  • 不要依赖于短路......这些子句可以按SQL Server认为合适的任何顺序进行评估. (4认同)
  • @Alex:它仍然会评估这两个条件,但由于`或',任何一个都可以为行包含在结果集中.如果`@vari为null`,则返回每一行,因为第一部分始终为true.否则,返回的唯一行将是与第二部分匹配的行,`col = @ vari`,它应用过滤器. (3认同)
  • 括号在这里是因为我习惯将OR放在括号中. (2认同)