2013-03-28 48 views
0

我正在學習Sql服務器並試圖做不同的例子。 你可以建議我在這種情況下使用什麼。 下面是我ckecklist(不復選框,在不同的窗口列表打開):在sql中做出多項選擇清單

Colors 
    Red 
    Blue 
    White 
    Black 
    Green 

從表item.colors

要根據選用的記錄提供搜索。 例如,可以說選擇了'Red'和'Blue',並且輸出要從表中獲取關聯記錄。

Colors 
    Red  v 
    Blue v 
    White 
    Black 
    Green 

所以輸出:

id Name  Colors 
    1 T-shirt Red  
    2 Boots  Blue  

任何建議,如何做到這一點?即使使用參數,那麼在數百條記錄的情況下該怎麼辦?我們不能有100個參數)

+0

你需要從cheked項目清單,並把在'IN'聲明http://msdn.microsoft.com/en-us/library/ms177682(v=sql.105).aspx – Justin 2013-03-28 08:32:49

回答

0

有可以使用(可能更多的兩種選擇):使用字符串參數

首先

A.,串連你的價值觀爲單一字符串中的應用程序並將其作爲一個varhcar參數。它可能看起來像這樣:'紅色;藍色'(或者可能是一些ID)。之後,SQL過程應該將字符串拆分回值列表並將其放置在#temp表中。網絡上有很多字符串分割功能。你可以很容易地谷歌爲它或檢查這個鏈接的一些想法:How do I split a string so I can access item x? 最終只需從#temp表中加入您的值與您的表來獲得所需的數據。

B. XML

這是一個更花哨的選項。將您的值從應用程序轉換爲XML並將其作爲XML參數傳遞給存儲過程。我不知道你使用什麼編程語言,但應該有一個提供的方法來做到這一點。然後在你的過程中 - 如果你知道如何 - 你可以直接將XML參數與你的表連接起來來過濾數據,或者再次,你可以先將它們傳到#temp表中。再一次,有很多關於如何使用XML的信息。一些例子: Select values from XML field in SQL Server 2008 http://blog.sqlauthority.com/2010/06/23/sqlauthority-news-guest-post-select-from-xml-jacob-sebastian/

編輯:(第三個選項,最簡單的,但我不會推薦它)

C.動態SQL

創建連接字符串,就像在選項A,但裏面的程序 - 不要將它分割回值,而是將它粘貼到SELECT語句的字符串中,並使用sp_executesql或EXEC。

SET @sql = 'SELECT * FROM YourTable WHERE Color IN (' + @parameter + ')' 
EXEC(@sql)