在sql server中选择存储过程返回的多列中的一列

时间:2014-11-26 09:03:23

标签: sql-server stored-procedures

我有一个存储过程,它返回多个列。我想要做的是从存储过程返回的数据中只选择一列。

我尝试创建临时表并将存储过程中的数据插入到临时表中,但我收到了错误。

我想要的是这样的。

select p_name from Exec sp_getPatientData

其中 sp_getPatientData 返回多个列。

有人可以帮助我。

2 个答案:

答案 0 :(得分:2)

如果你有这样的商店程序:

CREATE PROCEDURE spTest
AS
BEGIN
   SELECT 1 AS column1,'2' AS column2
END
GO

然后你可以这样做:

DECLARE @tbl TABLE(column1 INT,column2 VARCHAR(100))

INSERT INTO @tbl
    EXEC spTest

SELECT column1 FROM @tbl

<强>更新 您的语法有问题:

SET NOCOUNT ON; 
DECLARE tabl1 TABLE (Session_n int, patient_n int, initialName varchar(50), 
                     nodeValue varchar(50), diagCode varchar(50)); 
INSERT INTO tbl1 
EXEC SP_PATIENTALERTS 
SELECT PATIENT_N FROM tbl1 WHERE PATIENT_N = 12345 

这一部分:

INSERT INTO tbl1 
EXEC SP_PATIENTALERTS 
SELECT PATIENT_N FROM tbl1 WHERE PATIENT_N = 12345 

我想。应该是这样的:

INSERT INTO tabl1 
EXEC SP_PATIENTALERTS 
SELECT PATIENT_N FROM tabl1 WHERE PATIENT_N = 12345 

答案 1 :(得分:0)

我也遇到了问题和解决方案。

SP

Create PROCEDURE spTest1
AS
BEGIN
if object_id('TEMPDB..#tbl1') is not null
drop table #tbl1
CREATE TABLE #tbl1 (column1 INT,column2 VARCHAR(100)    )
DECLARE @sql nvarchar(max) = 'INSERT INTO #tbl1 
SELECT 111 AS column1,''2222'' AS column2
Union all
SELECT 221 AS column1,''2211'' AS column2'
insert into #tbl1
EXEC SP_EXECUTESQL @sql  

select column1,column2 from #tbl1
END
GO

和查询

SET NOCOUNT ON
DECLARE @tbl TABLE(column1 INT,column2 VARCHAR(100))

INSERT INTO @tbl
    EXEC spTest1
SELECT column1 FROM @tbl

生成错误

Msg 8164, Level 16, State 1, Procedure spTest1, Line 31
An INSERT EXEC statement cannot be nested.

解决方案:    当嵌套EXEC时,您不能使用insert。我刚从存储过程中删除了字符串查询并使用了直接选择查询。问题解决了。