我有一个存储过程,它返回多个列。我想要做的是从存储过程返回的数据中只选择一列。
我尝试创建临时表并将存储过程中的数据插入到临时表中,但我收到了错误。
我想要的是这样的。
select p_name from Exec sp_getPatientData
其中 sp_getPatientData 返回多个列。
有人可以帮助我。
答案 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。我刚从存储过程中删除了字符串查询并使用了直接选择查询。问题解决了。