変数でこのようなカンマ区切りの値を取得しています(変数名@listobjとしましょう)
'abc' , 'xyz'
しかし、以下のステートメントを使用している場合、正しい結果が得られません
SELECT * FROM someTable
Where column1 IN (@listobj)
しかし、abc はテーブルに存在します。
私はどこでそれを間違っていますか?
変数でこのようなカンマ区切りの値を取得しています(変数名@listobjとしましょう)
'abc' , 'xyz'
しかし、以下のステートメントを使用している場合、正しい結果が得られません
SELECT * FROM someTable
Where column1 IN (@listobj)
しかし、abc はテーブルに存在します。
私はどこでそれを間違っていますか?
文字列を分割する関数を作成します
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))
select * from someTable
where ','+LTRIM(RTRIM(@listobj))+',' LIKE '%,'+LTRIM(RTRIM(column1))+',%'
古典的な質問であり、答えはノーです。この方法でパラメーターを使用することはできません。回避策はいくつかありますが、
その 1 つは、ストアド プロシージャ内の値を解析し、後で実行するためにプロシージャ内で動的に sql を生成することです。ただし、これは良い方法ではありません。
この質問を参照してください
また、ここでそれに関するいくつかの良い議論