2014-06-20 89 views
2

我有一個查詢,其中提供了逗號分隔的條形碼。但不知什麼原因,它是不工作:SQL服務器,SQL查詢,「IN」語句不起作用

下面是不起作用

DECLARE @txtBarcode VARCHAR(MAX) 

SET @txtBarcode = '2003824,2003825'; 

SELECT [Scan_Curr_Location] 
FROM BarCode_Location_Current 
WHERE Scan_Curr_BarCodeNo IN (@txtBarcode) 
ORDER BY [Scan_Curr_BarCodeNo] ASC 

然而,當我將其更改爲一個單一的條形碼它工作正常,即代碼:

SET @txtBarcode = '2003824'; 

請指教。

謝謝!

+1

請參閱此處接受的答案:https://stackoverflow.com/questions/3516064/creating-a-sql-table-from-a-comma-concatenated-list 。我一直很喜歡解決這個問題的方式。 – VBlades

回答

3

IN不能像那樣工作。 它採用逗號分隔列表,而不是逗號分隔值的字符串。

這會工作:

SELECT [Scan_Curr_Location] FROM BarCode_Location_Current WHERE Scan_Curr_BarCodeNo 
IN ('2003824', '2003825') ORDER BY [Scan_Curr_BarCodeNo] ASC 
1

由於這裏記錄http://www.w3schools.com/sql/sql_in.asp: -

IN操作符可以讓你在WHERE子句 指定多個值。

SQL語法

SELECT列名(S)
FROM table_name的
WHERE列名IN(值1,值2,...);

所以你的情況,你應該讓逗號這樣的分離:

SELECT [Scan_Curr_Location] 
FROM BarCode_Location_Current 
WHERE Scan_Curr_BarCodeNo IN ('2003824', '2003825') 
ORDER BY [Scan_Curr_BarCodeNo] ASC 
0

另一種方法是使用像代替:

DECLARE @txtBarcode VARCHAR(MAX) 

SET @txtBarcode = '2003824,2003825'; 

SELECT [Scan_Curr_Location] 
FROM BarCode_Location_Current 
WHERE @txtBarcode LIKE '%' + Scan_Curr_BarCodeNo + '%' 
ORDER BY [Scan_Curr_BarCodeNo] ASC 

注意通配符「%」左右您正在搜索的列...