2015-08-19 51 views
0

我將一個表值參數傳遞給存儲過程以在where子句中使用,但是我想檢查參數是否先傳入或不先傳入。檢查此類參數的最佳方法是什麼?例如,我想選擇是沿着線:SQL表值參數 - 默認值

SELECT * 
FROM tableName 
WHERE 
@TVP IS NULL OR RecordID IN (SELECT * FROM @TVP) 
+1

你應該看看這篇文章的主題。 http://sqlinthewild.co.za/index.php/2009/09/15/multiple-execution-paths/ –

+2

TVP是一個表格,而不是一個變量。你不能說'WHERE dbo.tableName IS NULL',所以試試'WHERE NOT EXISTS(SELECT 1 FROM @TVP)''。你也應該命名列而不是說'*'。 –

回答

2

如果表值類型的參數不通過,它將是一個空表。所以你可以使用:

SELECT * 
FROM tableName 
WHERE not exists(select * from @TVP) 
    or RecordID IN (SELECT * FROM @TVP) 
+0

好吧,我不會推薦打擾計數,這需要一個完整的掃描,如果TVP可能很大,這可能是昂貴的。 –

+0

好點...當你的評論彈出時,我正在編輯我的答案。 :) –