使用字符串/数组构建查询

时间:2013-11-27 10:50:12

标签: sql sql-server sql-server-2008 linq-to-sql

我想创建一个过程,从数据库中选择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'获得结果?

或者任何人都可以建议其他解决方案 - 参数的形式可以改变(字符串在我看来是最好的,但你可以看到我无法解决问题)

1 个答案:

答案 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]