我想创建一个过程,从数据库中选择id不在指定集合中的项目。
集合作为文本参数传递(此处声明显示问题):
DECLARE @IDs nvarchar(500);
SET @IDS = '2499043,2499042,2499041,2499040,2499039,2499038,2499037'
我找到了可行的解决方案并显示结果:
Declare @ProductsSQL nvarchar(max);
Select @ProductsSQL = 'SELECT * FROM [Items] WHERE (ID not in (' + @IDs + '))'
exec sp_executesql @ProductsSQL
问题是想要处理(从这个结果中选择下一个)并返回它们。
如何从'sp_executesql'获得结果?
或者任何人都可以建议其他解决方案 - 参数的形式可以改变(字符串在我看来是最好的,但你可以看到我无法解决问题)
答案 0 :(得分:1)
您可以将查询结果存储到temptable
并使用该'temptable'进行处理。
您可以尝试以下代码:
Declare @ProductsSQL nvarchar(max);
Select @ProductsSQL = 'SELECT * into [tempdb].[dbo].[temptable] FROM [Items] WHERE (ID not in (' + @IDs + '))'
exec sp_executesql @ProductsSQL
SELECT * FROM [tempdb].[dbo].[temptable]
DROP TABLE [tempdb].[dbo].[temptable]