如何评估空字符串和值而不进行比较?

时间:2012-10-04 22:56:41

标签: sql sql-server

@myvar是一个nvarchar(30)。如何在不使用OR的情况下进行以下评估?

@myvar = '' OR (table1.col1 like @myvar)

还有其他方法更有效吗?

4 个答案:

答案 0 :(得分:1)

怎么样:

(table1.col1 like ISNULL(@myvar,table1.col1))

答案 1 :(得分:1)

还有其他方法,实际上还有很多。但是,如果添加OPTION(RECOMPILE),则表单对大多数SQL Server 2005版本的表现最佳。

在此查看searching with dynamic conditions的权威指南。请关注您的SQL Server版本的链接。

答案 2 :(得分:1)

table1.col1 like ISNULL(NULLIF(@myvar, ''), table1.col1)

答案 3 :(得分:1)

如果有一个面试问题,OR被禁止,De Morgan's laws被遗忘,那么可以使用:

case
  when @myvar = '' then 42
  when table1.col1 like @myvar then 666
  else 0 end > 0

也可以尝试使用Len( @myvar ) = 0