我的变量如下:
DECLARE @number AS NVARCHAR(1000)
SET @number = '1,2,3,4,5,6'
我在WHERE语句中的内容是这样的:
WHERE V.client IN (@number)
我的V.Client
列是整数。我想做的是从@number中删除',并使它看起来像1,2,3,4,5,6。我试图做到这一点,
',' + @number + ',' LIKE '%,' + CAST(V.client AS VARCHAR) + ',%'
,但它仅返回1的结果,而不返回其他数字。
有人对我能做什么有任何想法吗?
答案 0 :(得分:3)
另一个选择
DECLARE @number AS nvarchar(1000)
SET @number = '1,2,3,4,5,6'
...
WHERE V.client IN (
Select RetVal = B.i.value('(./text())[1]', 'int')
From (Select x = Cast('<x>' + replace(@Number,',','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
)
如果是2016年以上的版本,请使用 string_split()
答案 1 :(得分:0)
动态sql是最常用的选项,下面是如何使用它的代码段
DECLARE @number AS nvarchar(1000)
SET @number = N'1,2,3,4,5,6'
declare @cmd nvarchar(1000) = N'select case when 1 in ' + Quotename(@number, '()') + ' then 1 else 0 end'
exec sp_executesql @cmd
这将准备以下查询
select case when 1 in (1,2,3,4,5,6) then 1 else 0 end
您可以考虑的其他选项: 拆分字符串并使用标准sql查询。 在新的sql server中,有一个string_split函数,可以使您完全想要https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017。 在旧版本中,您可以创建功能完全相同的自定义功能How do I split a string so I can access item x?