2

変数でこのようなカンマ区切りの値を取得しています(変数名@listobjとしましょう)

'abc' , 'xyz'

しかし、以下のステートメントを使用している場合、正しい結果が得られません

SELECT * FROM someTable
Where column1 IN (@listobj)

しかし、abc はテーブルに存在します。

私はどこでそれを間違っていますか?

4

3 に答える 3

2

文字列を分割する関数を作成します

    CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))     
returns @temptable TABLE (items varchar(8000))     
as     
begin     
declare @idx int     
declare @slice varchar(8000)     

select @idx = 1     
    if len(@String)<1 or @String is null  return     

while @idx!= 0     
begin     
    set @idx = charindex(@Delimiter,@String)     
    if @idx!=0     
        set @slice = left(@String,@idx - 1)     
    else     
        set @slice = @String     

    if(len(@slice)>0)
        insert into @temptable(Items) values(@slice)     

    set @String = right(@String,len(@String) - @idx)     
    if len(@String) = 0 break     
end 
return     
end

then make call to the function SELECT * FROM someTable
Where column1 IN (dbo.Split(@listobj))

ここにリンクの説明を入力

于 2013-03-20T11:42:05.120 に答える
1

SQLFiddleデモ

select * from someTable
where ','+LTRIM(RTRIM(@listobj))+',' LIKE '%,'+LTRIM(RTRIM(column1))+',%'
于 2013-03-20T11:46:50.817 に答える
0

古典的な質問であり、答えはノーです。この方法でパラメーターを使用することはできません。回避策はいくつかありますが、

その 1 つは、ストアド プロシージャ内の値を解析し、後で実行するためにプロシージャ内で動的に sql を生成することです。ただし、これは良い方法ではありません。

この質問を参照してください

コンマ区切りリストをストアドプロシージャに渡す方法は?

また、ここでそれに関するいくつかの良い議論

http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/1ccdd39e-8d58-45b2-9c21-5c4dbd857f95/

于 2013-03-20T11:41:19.840 に答える