Sql n列的快捷方式与相同常量进行比较?
我找不到这个问题的答案。非常简单的问题,细节很少 有没有更好的方法来做这样的事情:Sql n列的快捷方式与相同常量进行比较?,sql,sql-server-2008,tsql,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 如果多个列都必须以相同的方式与单个常量进行比较?我认为这是最好的方法。根据我的理解,没有其他更好的方法来实现这一点。关于我能想到
SELECT *
FROM tablename tn
WHERE tn.col1 = 1
AND tn.col2 = 1
AND tn.col3 = 1
AND tn.col4 = 1
...
AND tn.coln = 1
如果多个列都必须以相同的方式与单个常量进行比较?我认为这是最好的方法。根据我的理解,没有其他更好的方法来实现这一点。关于我能想到的唯一一件事(它只在某些情况下有用)是将一个持久化计算字段添加到使用如下逻辑的表本身。对于一个高度事务性的表,我不推荐这种方法,如果它是许多地方经常使用的过滤器,它甚至只会考虑它。所得到的是一个单一的值,您可以对其进行筛选和索引,以便对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
我想这里“更好”的意思是“少打字”?如果是这样,您可以通过使用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%'
但是请记住,您阅读代码的时间比编写代码的时间要长得多,因此最重要的是查询的含义应该尽可能容易理解,并且您当前的查询已经非常清楚了。如果您使用的是SQL 2012,您可能可以使用新的
CONCAT
功能,然后做一些类似于WHERE REPLACE(CONCAT(col1,col2,col3,col4,col5,col6),'1','')=',但这可能比不上上面的查询,可能也不太容易。是的,我希望能有类似于(col1,col2,…,coln)=1
的东西,但这看起来是不可能的。我可以用不同的方式轻松解决我的具体问题,我只是想知道是否有更快的(打字)方式。