首先,創建分割功能,將您的分隔字符串轉換成表格:
CREATE FUNCTION [dbo].[Split]
(
@String varchar(max)
,@Delimiter char
)
RETURNS @Results table
(
Ordinal int
,StringValue varchar(max)
)
as
begin
set @String = isnull(@String,'')
set @Delimiter = isnull(@Delimiter,'')
declare
@TempString varchar(max) = @String
,@Ordinal int = 0
,@CharIndex int = 0
set @CharIndex = charindex(@Delimiter, @TempString)
while @CharIndex != 0 begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,substring(@TempString, 0, @CharIndex)
)
set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex)
set @CharIndex = charindex(@Delimiter, @TempString)
end
if @TempString != '' begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,@TempString
)
end
return
end
然後改變你的where子句如下:
select
t.*
from [yourTable] t
where t.[ID] not in (select cast([StringValue] as int) from dbo.Split(@sRemovePreviouslySelectedWhereClause,','))
沒有被我所知道的任何供應商支持的SQL它支持使用變量爲IN/NOT IN子句提供逗號分隔列表。使用動態SQL,或將值列表轉換爲表值函數/等進行比較。 – 2011-03-01 06:07:15
[SQL Server SP - 傳遞參數爲「IN」數組列表?]的可能的重複(http://stackoverflow.com/questions/537087/sql-server-sp-pass-parameter-for-in-array-list) – onedaywhen 2011-03-01 08:16:35
這是最常見的問題之一。你會發現許多重複(或非常接近的問題)。 – onedaywhen 2011-03-01 08:17:31