2013-04-14 260 views
1

此查詢從答案here。 where子句中有(1 = 1),但執行計劃相同(SQL Express 2008R2)。爲什麼Where子句中的(1 = 1)?

我猜這是從舊時代的神器?

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

DUP:[爲什麼有人在SQL子句中使用WHERE 1 = 1和?](http://stackoverflow.com/questions/242822/why-would-someone-use-where-1-1-and -conditions-in-a-sql-clause) –

+0

(1 = 1)等於true,嘗試刪除where語句並查看發生了什麼。 – DragonZero

+0

有時1 = 1或1 = 2用於執行某些總是返回true或false的內容,以幫助原始程序員開發其邏輯。然後,他們只是把它留在那裏。 –

回答

8

生成從代碼動態SQL時,可以是有用的,只是用WHERE (1=1)然後串連\追加AND <Condition>根據需要啓動。不知道這個答案是否屬於這種情況,但也許它是基於一些用於生成SQL的代碼。

+0

他們這樣做是因爲這個原因我的工作。我個人認爲這是我見過的最蹩腳的事情。但是我在我的工作中這樣編寫代碼,以適應我團隊中的其他開發人員。有正確的,然後有涼爽。 –