n列的快捷方法与同一常数相比较?

时间:2012-10-04 14:46:51

标签: sql sql-server-2008 tsql

我无法以这种方式找到答案。非常简单的问题,细节很少。

有没有更好的方法来做这样的事情:

SELECT *
FROM tablename tn
WHERE tn.col1 = 1
      AND tn.col2 = 1
      AND tn.col3 = 1
      AND tn.col4 = 1
      ...
      AND tn.coln = 1

多列必须以相同的方式与单个常量进行比较?

3 个答案:

答案 0 :(得分:1)

我认为这是最好的方法。按照我的理解,没有其他更好的方法来实现这一目标。

答案 1 :(得分:0)

关于我能想到的唯一事情(并且它只在某些情况下有用)是将持久计算字段添加到表本身,该字段使用如下的逻辑。我不推荐这种方法用于高度事务性的表,如果这是一个在许多地方使用的过滤器并且经常使用,我甚至只会考虑它。获得的是您可以过滤和索引的单个值,以便优化SELECT。

ALTER TABLE [tablename] 
   ADD SAMEVALUE AS (CASE WHEN col1 = col2 AND col1 = col3 
       AND col1 = col4 AND .. col1 = coln THEN col1 ELSE NULL) PERSISTED 

答案 2 :(得分:0)

我认为这里的“更好”意味着“减少打字”?如果是这样,您可以通过使用Intellisense或执行相同操作的第三方工具来加快速度,或者如果您有大量列,则使用您喜欢的脚本语言(Perl,Python,PowerShell等)来生成WHERE条款给你。您甚至可以使用SQL本身:

select 'tn.' + quotename(name) + ' = 1 and '
from sys.columns
where object_id = object_id('MyTable')
and name like 'col%'

但请记住,您花费更多时间阅读代码而不是编写代码,因此最重要的是查询的含义应尽可能容易理解,并且您当前的查询已经非常明确。