我有一个存储过程,我需要将逗号分隔的变量传递给。
例如,如果存在某种情况,我会传递一个国家代码列表,如下所示:
AU,RA,PK
项目数量可能会有所不同。
在存储过程中,我需要在IN
子句中使用这些项,如下所示:
WHERE CountryCode IN (@ExcludeCountries)
有没有办法做到这一点?如果需要,我可以按下N'AU', N'RA', N'PK'
之类的国家代码。
感谢。
答案 0 :(得分:0)
WHERE CountryCode IN (SELECT *
FROM [dbo].[ufn_CSVToTable](@ExcludeCountries,',')
这是您创建[dbo].[ufn_CSVToTable]
的方法:
How to convert comma separated NVARCHAR to table records in SQL Server 2005?
答案 1 :(得分:0)
在实践中,我已经看到使用下面的功能解决了这个问题。此函数拆分字符串并返回包含指定值的表。然后像这样使用它......
... CountryCode IN(SELECT * FROM dbo.SplitString(@ExcludeCountries,','))
请注意,在此示例中,逗号(',')是分隔符。我已经使用这种方法多年了,我没有遇到任何性能问题。
CREATE FUNCTION [dbo].[SplitString]
(
@SplitStr nvarchar(MAX),
@SplitChar nvarchar(5)
)
RETURNS @RtnValue table
(
Data nvarchar(MAX)
)
AS
BEGIN
Declare @Count int
Set @Count = 1
While (Charindex(@SplitChar,@SplitStr)>0)
Begin
Insert Into @RtnValue (Data)
Select
Data = ltrim(rtrim(Substring(@SplitStr,1,Charindex(@SplitChar,@SplitStr)-1)))
Set @SplitStr = Substring(@SplitStr,Charindex(@SplitChar,@SplitStr)+1,len(@SplitStr))
Set @Count = @Count + 1
End
Insert Into @RtnValue (Data)
Select Data = ltrim(rtrim(@SplitStr))
Return
END
答案 2 :(得分:-1)
有两种方法可以做到:
@ExcludeCountries
参数构建表变量表像这样构建一个动态SQL语句
... + 'WHERE CountryCode IN' (' + @ExcludeCountries + ')' ...
然后使用sp_executesql
执行语句