为什么Where子句中的(1 = 1)?

时间:2013-04-14 21:37:30

标签: sql where-clause

此查询来自答案here。 where子句中有一个(1 = 1),但执行计划是相同的(SQL Express 2008R2)。

我猜这是过去的神器?

SELECT 
     ind.name 
    ,ind.index_id 
    ,ic.index_column_id 
    ,col.name 
    ,ind.* 
    ,ic.* 
    ,col.* 
FROM sys.indexes ind 

INNER JOIN sys.index_columns ic 
    ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id 

INNER JOIN sys.columns col 
    ON ic.object_id = col.object_id and ic.column_id = col.column_id 

INNER JOIN sys.tables t 
    ON ind.object_id = t.object_id 

WHERE (1=1) 
    AND ind.is_primary_key = 0 
    AND ind.is_unique = 0 
    AND ind.is_unique_constraint = 0 
    AND t.is_ms_shipped = 0 
ORDER BY 
    t.name, ind.name, ind.index_id, ic.index_column_id 

1 个答案:

答案 0 :(得分:8)

从代码生成动态SQL时,只需从WHERE (1=1)开始,然后根据需要连接\ append AND <Condition>即可。不确定这个答案是否就是这种情况,但也许它是基于一些生成SQL的代码。