我想将声明的变量传递到哪里。
例如,我有一个表#test
:
ID Amount
1 100
2 50
3 20
4 40
5 150
我想做这样的事情:
declare @id varchar(11) = '(1, 4, 5)'
select * from #test where IDNumber in @id
我该怎么做?
答案 0 :(得分:1)
如评论中所述,最好使用其他数据类型。
但是,如果您确实想像您的示例那样做,则可以使用动态sql:
DECLARE @ids VARCHAR(32) = '1,4,5';
DECLARE @result TABLE (ID INT, Amount INT);
DECLARE @sql NVARCHAR(MAX) =
N' SELECT ID, Amount
FROM #test
WHERE ID IN (' + @ids + ');';
PRINT @sql;
INSERT @result
EXEC(@sql);
SELECT*
FROM @result;
如果您需要在脚本中再次使用结果,则将结果放入表变量中;否则,只需EXEC
sql
答案 1 :(得分:1)
尝试以下操作:
declare @id varchar(11) = '(1, 4)'
declare @sql nvarchar(max)
set @sql='select * from TABLE_NAME where id in '+ @id
EXEC sp_sqlexec @sql
SQL Server 2014
答案 2 :(得分:1)
创建一个表值用户定义的函数,如下所示。在线有很多示例。
Convert comma separated list to Table valued function
与动态sql代码相比,这将为您提供良好的结果和更好的方法。
一旦有了函数dbo.split(@string NVARCHAR(4000),',')
,就可以在JOIN中使用它们,如下所示。
declare @id varchar(11) = '1, 4, 5'
select t.* from #test as t
JOIN dbo.Split(@id,',') AS csv
ON t.id = csv.data;