0

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

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

还有其他更有效的方法吗?

4

4 回答 4

1

如果有一个面试问题在哪里OR被禁止并且德摩根的法律被遗忘了,那么人们可以使用:

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

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

于 2012-10-05T00:29:52.793 回答
1

怎么样:

(table1.col1 like ISNULL(@myvar,table1.col1))
于 2012-10-04T22:58:16.503 回答
1
table1.col1 like ISNULL(NULLIF(@myvar, ''), table1.col1)
于 2012-10-04T23:58:31.943 回答
1

还有其他的方法,其实还有很多。但是,如果您添加 OPTION (RECOMPILE),则您所拥有的表单对于 SQL Server 2005 及更高版本的大多数版本都表现最佳。

在此处查找有关使用动态条件进行搜索的权威指南。按照您的 SQL Server 版本的链接。

于 2012-10-04T23:28:14.460 回答