[TSQL]Procdure 或 SqlParameter 來下SQL指令 Where In 多個值的變數解決方法

剛剛看到 puma 貼出的 解決ASP.NET的SqlCommand,利用SqlParameter來下SQL指令"Where In"的問題
就回想起之前也解決同樣的問題,我採用的方法是用TSQL的比較方式,來取出傳入的變數,
我就直接以TSQL為例,就不多寫 .NET 傳進來的那段
首先我以 Northwind 的 Orders為例

剛剛看到 puma 貼出的 解決ASP.NET的SqlCommand,利用SqlParameter來下SQL指令"Where In"的問題

就回想起之前也解決同樣的問題,我採用的方法是用TSQL的比較方式,來取出傳入的變數,
我就直接以TSQL為例,就不多寫 .NET 傳進來的那段
首先我以 Northwind 的 Orders為例

-- 這邊是.NET 傳入的值
DECLARE @CustID varchar(50)
SET @CustID = 'TOMSP,HANAR'
--用 Charindex 來做比較找出要的答案
SELECT * FROM Orders WHERE CHARINDEX(CustomerID,@CustID) > 0
-- 透過這個方式就不需要在前面的.NET 把變數變成命令的方式丟進來

--而問題的原因是


-- 錯誤 因為 IN 不能用變數的方式 exec 也不行運作
/*
語法
test_expression [ NOT ] IN
    (
        子查詢 (Subquery)
        | expression [ ,...n ]
    )

*/

而使用 CHARINDEX 主要是找出符合比較值,傳回在比較值的顯示位置(如果有就會大於0)
可以由以下的TSQL查出來答案

SET @CustID = 'TOMSP,HANAR'
SELECT CHARINDEX(CustomerID,@CustID),* FROM Orders
WHERE CHARINDEX(CustomerID,@CustID) > 0
SELECT @CustID


當時是回答在 MSDN FORUM 回覆:Procdure 如果使用in 那麼EXEC時該如何下多個值?
之後在找各時間,把之前的東西好好的整理,可以貼上各來跟大家分享一下,自己要找答案也比較快。