如何在IN where子句中传递逗号分隔值

时间:2015-06-19 06:30:49

标签: proc

我想问一下如何通过' 30' 31'' 32'到SQL WHERE IN子句例如

EXEC SQL DECLARE abcd CURSOR for SELECT寄售FROM Transaction WHERE order_type IN(:dest)

其中dest将保留值' 30' 31'' 32'

我已经尝试过上面的示例,但它不起作用SQL没有返回任何结果。

1 个答案:

答案 0 :(得分:0)

没有简单的方法。分隔seperator(,)上的数据,插入while循环中的表。然后" IN(选择" column_name"来自临时表)"。现在拆分并插入临时表是一件棘手的事情。

DECLARE @StringToSeperate VARCHAR(10)
SELECT @StringToSeperate = '1,2,5'

--SELECT @StringToSeperate IDs INTO #Test


CREATE TABLE #valus (ID int) 

DECLARE @CommaSeperatedValue VARCHAR(255) = ''
DECLARE @Position INT = LEN(@StringToSeperate)

--Add Each Value
WHILE CHARINDEX(',', @StringToSeperate) > 0
BEGIN
    SELECT @Position  = CHARINDEX(',', @StringToSeperate)  
    SELECT @CommaSeperatedValue = SUBSTRING(@StringToSeperate, 1, @Position-1)

    INSERT INTO #valus 
    SELECT @CommaSeperatedValue

    SELECT @StringToSeperate = SUBSTRING(@StringToSeperate, @Position+1, LEN(@StringToSeperate)-@Position)

END

--Add Last Value
IF (LEN(LTRIM(RTRIM(@StringToSeperate)))>0)
BEGIN
    INSERT INTO #valus
    SELECT SUBSTRING(@StringToSeperate, 1, @Position)
END

SELECT ID FROM #valus