单个变量sql中的几行

时间:2013-04-15 07:42:18

标签: sql variables subquery

我有以下sql返回多行:

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

它会返回如下所示的几个ID:

enter image description here

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

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只返回了一行。

enter image description here

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

我希望我的@result包含几个ID,而不仅仅是最后一个。我怎样才能做到这一点?我的剧本怎么了?

非常感谢您提供的任何帮助。

谢谢!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您正在寻找的是临时表。

SELECT id INTO #TEMP FROM table WHERE ...

然后你可以继续做

SELECT * FROM #TEMP