Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单变量sql中的多行_Sql_Variables_Subquery - Fatal编程技术网

单变量sql中的多行

单变量sql中的多行,sql,variables,subquery,Sql,Variables,Subquery,我有以下返回多行的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 @quer

我有以下返回多行的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)
所以我的解决方案是将上面的第一个查询放在一个变量中,然后执行它。所以我是这样做的:

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,而不仅仅是最后一个ID。我该怎么做?我的剧本怎么了

如果您能提供任何帮助,我们将不胜感激


谢谢

问题在于您在此处分配变量@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);

你要找的是临时表

SELECT id INTO #TEMP FROM table WHERE ...
然后你可以继续做下去

SELECT * FROM #TEMP