我生成逗号分隔字符串并为每个数字添加单个
我是这样做的
-Wunused-variable
如果我打印变量DECLARE @IDs NVARCHAR(max)
SELECT @IDs = COALESCE(@IDs +',', '') + ''''
+ Cast([mynos] AS NVARCHAR(255)) + ''''
FROM mytable
WHERE id = 22
,那么我得到低于输出
@IDs
当我在此查询中使用相同的变量时,查询不会返回任何值
'78888','3333','1222'
如何解决这个问题?
答案 0 :(得分:4)
它不起作用,因为您的查询实际上是这样做的:
SELECT *
FROM TABLE
WHERE Ids IN ('''78888'',''3333',''1222''');
这也相当于:
SELECT *
FROM TABLE
WHERE Ids = '''78888'',''3333',''1222''';
如果您想要执行查询,则需要再次拆分已删除的数据。当您使用SQL Server 2012时,您无法使用STRING_SPLIT
,因此您需要使用不同的版本;比如Jeff Moden的DelimitedSplit8K。然后你可以这样做:
SELECT *
FROM TABLE
WHERE IDs IN (SELECT items
FROM dbo.DelimitedSplit8K (@IDs,','));
但是,你为什么不干脆......
SELECT *
FROM TABLE T
WHERE EXISTS (SELECT 1
FROM myTable mT
WHERE mT.Id = 22
AND mT.myNos = T.Ids);
答案 1 :(得分:1)
您可以使用动态查询@id
是字符串变量而不是多值参数
DECLARE @IDs nVARCHAR(MAX)
SELECT @IDs = COALESCE(@IDs +',' ,'') + '''' + CAST([myNos] AS nVARCHAR(255)) + ''''
FROM myTable WHERE Id = 22
DECLARE @query nVARCHAR(MAX)
SET @query = "Select * from table1 where Ids in ("+@IDs+")"
EXECUTE sp_executesql @query
答案 2 :(得分:0)
我在下面尝试过它
select * from table1 where id in (select mynos from mytable where id = 22)
感谢@Larnu给我的想法