0

我有以下返回几行的sql:

declare @blabla
select id from table where @blabla = blabla and blabla is blabla

它返回几个 id,如下所示:

在此处输入图像描述

现在稍后介绍我的存储过程。我需要从该查询中获取结果。所以我有另一个这样的查询:

select column from table where blabla IN (that 1st query)

所以我的解决方案是将上面的第一个查询放在一个变量中然后执行它。所以我做的是这样的:

declare @query nvarchar(max)
set @query=
'
declare @blabla
select @body = id from table where @blabla = blabla and blabla is blabla
'

declare @result as nvarchar(max)
exec sp_executesql @query, N'@body varchar(max) output', @body = @result output


select column from table where blabla IN (@result)

但是上面的@result 只返回了一行。

在此处输入图像描述

这是执行我的第一个查询时的最后一行。

我希望我的@result 包含几个 id,而不仅仅是最后一个。我怎样才能做到这一点?我的脚本有什么问题?

您能提供的任何帮助将不胜感激。

谢谢!

4

2 回答 2

1

问题是您在此处分配变量 @Body 的方式:

select @body = id 
from table 
where @blabla = blabla and blabla is blabla

这只会为@body 提供最后遇到的 ID 的值(取决于结果的顺序)。

为了在您可以使用表变量之后执行您的操作:

DECLARE @Result TABLE (ID INT);
INSERT @Result (ID)
SELECT  ID
FROM    Table
WHERE   @Blabla = blabla;


SELECT  column 
FROM    table 
WHERE   ID IN (SELECT ID FROM @Result);
于 2013-04-15T08:00:27.467 回答
0

您正在寻找的是一个临时表。

SELECT id INTO #TEMP FROM table WHERE ...

然后你可以继续做

SELECT * FROM #TEMP 
于 2013-04-15T08:01:00.137 回答