我有一個過程,其中以下條件將被寫入WHERE子句中。我怎麼做。有條件檢查Where子句
itemid是一個可以爲null的參數。
如果itemid的可用然後將其添加到我的where子句,否則什麼也不做
我有一個過程,其中以下條件將被寫入WHERE子句中。我怎麼做。有條件檢查Where子句
itemid是一個可以爲null的參數。
如果itemid的可用然後將其添加到我的where子句,否則什麼也不做
有些人用這種技術
... WHERE @itemid IS NULL OR tbl.itemid = @itemid
它保證,雖然你永遠不會得到一個指數ITEMID列求。
如果表是在所有大更好的辦法是到了分裂查詢分成2個獨立的情況下
IF(@itemid IS NULL)
SELECT foo FROM bar
ELSE
SELECT foo FROM bar WHERE itemid = @itemid
如果組合的數量太大,可以考慮動態SQL。確保你首先理解SQL注入。
如果我們有'@itemid IS NULL OR tbl.itemid = @ itemid',你確定沒有使用索引itemid嗎?根據巡迴測試,其使用指數。也許你的回答太舊了? – user960567 2017-03-21 13:51:14
例如
SELECT Something
FROM SomeTable
WHERE (@MyParam IS NULL OR SomeField = @MyParam)
AND AnotherField = 1
您需要在特定場景中測試性能。如果它是一個簡單的查詢,即沒有很多的條件參數,你可能會想,而不是嘗試一下本作的表現:
IF (@MyParam IS NULL)
SELECT Something
FROM SomeTable
WHERE AnotherField = 1
ELSE
SELECT Something
FROM SomeTable
WHERE SomeField = @MyParam
AND AnotherField = 1
,如果你想人來幫助你先幫助他們理解你的問題。 「它不工作」是什麼意思?什麼是完整查詢? – Andrey 2010-08-10 10:32:07
如果ItemID爲NULL,那麼它不應該獲取任何行?還是應該在Row_Start和Row_End之間獲取rownum? – 2010-08-10 10:34:02