@myvar是一个nvarchar(30)。如何在不使用OR的情况下进行以下评估?
@myvar = '' OR (table1.col1 like @myvar)
还有其他方法更有效吗?
答案 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
。