这是关于在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
有关最佳方式的任何想法吗?
答案 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中就可以使用))