从第二个存储过程返回存储过程结果?

时间:2011-04-12 10:02:18

标签: sql sql-server stored-procedures

这是关于在MSSQL 8上运行的一些存储过程的问题(我认为是SQL Server 2000)。

我的前任在公司留下了两个存储过程。

第一个过程的“修改”窗口如下所示:

ALTER PROCEDURE [dbo].[Proc1]
    @ID,
    @someBool

AS
BEGIN

SELECT colA, colB, colC
FROM   myTable
WHERE  colA = @ID AND colB = @someBool

END

第二个程序非常相似,有以下几点:

ALTER PROCEDURE [dbo].[Proc2]
    @ID

AS
BEGIN

SELECT colA, colB
FROM   myTable
WHERE  colA = @ID AND colB = FALSE

END

显然,真正的程序比这更复杂,并且在进行更改时需要更多的维护。

不是单独维护这两个查询,这非常糟糕,我想知道是否有任何方法让Proc2做一些事情:

ALTER PROCEDURE [dbo].[Proc2]
    @ID

AS
BEGIN

EXEC Proc1(@ID, FALSE)
"drop colC"
"return modified result"

END

有关最佳方式的任何想法吗?

2 个答案:

答案 0 :(得分:1)

也许是这样的?

CREATE TABLE #Proc1TempResults
(
    ColA INT, --OR WHATEVER DATA TYPE
    ColB INT,
    ColC INT
)

INSERT INTO #Proc1TempResults (ColA, ColB, ColC)
EXEC Proc1 @ID, 0

SELECT ColA, ColB
FROM #Proc1TempResults

答案 1 :(得分:0)

困难在于存储过程是非关系型的。因此,除了参与Insert语句之外,它们不能在其他查询中使用;或借用一些Linq白话,它们不是“可组合的”。

您想要考虑表值函数(我认为早在SQL Server 2000中就可以使用))