我有以下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,而不仅仅是最后一个。我怎样才能做到这一点?我的剧本怎么了?
非常感谢您提供的任何帮助。
谢谢!
答案 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