關於 點部落 團隊
我們是一群普通的程式設計人員,在各自不同的領域發展, 由於對 IT 知識社群發展有一股的熱誠,所以我們一起創造了這個平台, 我們希望透過 點部落平台 能夠創造出更好的 IT 知識技術分享環境。 歡迎您參與點部落,也請給我們意見與指教,讓我們能夠持續的改善, 營造出更好的環境及平台。tw.dotblogs@gmail.com

常用連結

最新回應

剛剛看到 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時該如何下多個值?
之後在找各時間,把之前的東西好好的整理,可以貼上各來跟大家分享一下,自己要找答案也比較快。

 


回應

  • puma 2008/4/8 下午 06:38 回覆

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

    感謝Dotjum的方法呀..

  • bibbynet 2008/5/6 下午 12:45 回覆

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

    Dotjum..你的方法我有測試過ㄟ..會有些問題ㄟ..
    例如..我有一個欄位..我想篩選..'ab,cd'..
    如你所說的..ab,cd...都沒問題都會找出來..
    可是..欄位只有單一a,b,c,d也都出來啦..^^||..
    我是發現這問題..^^..

  • dotjum 2008/5/7 下午 10:40 回覆

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

    那明天來試看看,之前還沒發現,先謝謝你跟我說了

  • dotjum 2008/5/8 下午 12:04 回覆

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

    to bibbynet :
    正如你所說,當資料是 a,b,c,d,ab,cd 搜尋 ab,cd 時,
    這樣的搜尋方式會變成Like,找出的資料不準確。
    因該是我當時查的資料表都是剛好符合我設定的條件,
    我想我這樣的方式,因該是有些問題,
    謝謝你的測試,讓我知道原來我這樣的查詢是有問題的。

  • 阿城 2008/5/24 下午 03:23 回覆

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

    之前寫過一個拆字串的 Sql Function..
    http://www.dotblogs.com.tw/rachen/archive/2008/05/23/4110.aspx

    也許可以應用在這個問題^^
    DECLARE @CustID varchar(50)
    SET @CustID = 'TOMSP,HANAR'
    -----------
    SELECT *
    FROM Orders
    WHERE
    CustomerID In ( Select Data From dbo.fn_slip_str(@CustID,',') );

  • dotjum 2008/5/26 下午 10:30 回覆

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

    阿城:
    謝謝您的方法,得確能夠解掉 bibbynet 所提出的問題,
    DECLARE @a varchar(50)
    SET @a = 'ab,cd'

    SELECT * FROM dbo.TestTemp
    WHERE
    value In ( Select Data From dbo.fn_slip_str(@a,',') );

    自己做 function 然後讓 in 去對應到 Table 型態,才是比較好的解法,謝謝你的分享。

     

  • bibbynet 2008/7/15 下午 04:31 回覆

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

    收到..這的確是好解法..乾溫ㄟ..^____^..


*標 題:

*姓 名:

 電子郵件: (將不會被顯示)

 個人網頁:

*回應

登入後使用進階評論

Please add 4 and 6 and type the answer here: