[英]T-SQL - Easier way to use stored procedure data
我有很多时候都在调用的存储过程。 由于其他程序正在使用这些程序,因此我无法更改它们本身。 他们中的大多数没有输出,但是有类似这样的东西来返回值:
SELECT Duration = dbo.fn_Duration(@intPD, @dtmStart, dtmEnd, null)
目前,我正在使用每个存储过程,并将其返回到这样的表中:
CREATE TABLE #ResultTable(ret float)
INSERT INTO #ResultTable
EXEC sp_Duration @ID
SELECT @Duration = ret
FROM #ResultTable
现在-因为我有13个存储过程,所以要一遍又一遍地执行此操作(以及从#ResultTable
运行删除#ResultTable
),然后将其作为某种“汇总”数据推送到表中。 目的是让1个位置以指定的时间间隔读取数据,而不是从多个Web页反复运行存储过程。
我想比做的更简短(每个存储过程大约需要4行代码。我希望这样做:
INSERT INTO #FullResultsTable
EXEC sp_Duration @ID, EXEC sp_GetID @Name, ......
但是-似乎不可能:(
关于在不更改存储过程本身的情况下如何做得更好的任何想法?
您不能嵌套INSERT EXEC
命令,例如
INSERT INTO #Table
EXEC procedure1
EXEC procedure2
只需在插入中运行第一个,然后作为独立命令运行第二个
INSERT INTO #Table
EXEC procedure1
UNION
EXEC procedure2
会在UNION
上出错
如果要将所有数据放在一个表中,则可以运行多个INSERT INTO EXEC
命令以填充同一表。 例如
CREATE PROCEDURE #TEST1 AS
(
SELECT 1
)
GO
CREATE PROCEDURE #TEST2 AS
(
SELECT 1
)
GO
CREATE PROCEDURE #TEST3 AS
(
SELECT 1
)
GO
CREATE TABLE #TESTTABLE (ID INT)
INSERT INTO #TESTTABLE
EXEC #TEST1
INSERT INTO #TESTTABLE
EXEC #TEST2
INSERT INTO #TESTTABLE
EXEC #TEST3
SELECT * FROM #TESTTABLE
DROP PROCEDURE #TEST1
DROP PROCEDURE #TEST2
DROP PROCEDURE #TEST3
DROP TABLE #TESTTABLE
这将返回结果:
ID
1
1
1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.