2009-02-26 86 views
3

想象一下以GUID作爲主鍵的表。我想根據主鍵選擇其中的一些行。我想用類似的查詢:是否可以使用查詢參數填充IN關鍵字

SELECT * FROM mytable WHERE id IN ('firstguidhere','secondguidhere'); 

我使用ADO.NET來查詢數據庫,所以我想用一個參數化查詢,而不是動態SQL,這顯然工作,但我想保留參數化查詢的好處(安全性,轉義等)。

是否有可能使用sql參數填充IN子句的集合?

+0

這裏有一個重複的問題...某處找到它...... – 2009-02-26 10:17:59

+1

的http:// stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause – 2009-02-26 10:18:48

回答

5

你可以通過GUID列表作爲一個逗號分隔的字符串參數,並使用表值UDF將它們分成表中的IN子句中使用:

SELECT * 
FROM my_table 
WHERE id IN (SELECT id FROM dbo.SplitCSVToTable(@MyCSVParam)) 

厄蘭Sommarskog有interesting article以及如何使用UDF將逗號分隔的字符串拆分爲表的示例。

(出於性能考慮,你應該確保你的UDF是聯表值,而不是多語句)。

相關問題