SQL Server存储过程问题调用另一个存储过程

时间:2009-06-26 14:47:00

标签: sql-server sql-server-2005 stored-procedures

这是我对存储过程(使用SQL Server 2005)的一个问题,在这个存储过程中,它调用另一个存储过程将数据放入临时表。

INSERT INTO #tmpTable (Column1, Column2, Column3) 
EXEC psp_rptInsideStoredprocedure 2

此内部存储过程有一个mode参数,用于确定传递哪些列。在此模式(模式2)中,只有3列被传出,当此内部存储过程用于另一个报表(模式1)时,4列被传递出去。有时,父存储过程会抱怨尝试插入4列,有时不会。

我知道它总是在模式2中传递但是就像SQL Server知道有时这个存储过程已经传回了4列。

对解决方案的任何想法?

由于

2 个答案:

答案 0 :(得分:3)

使子进程始终返回相同数量和类型的列,必要时使用NULL。如果两个版本的结果如此不同,你不能像这样将它们组合起来,你应该考虑制作两个不同的程序。

我只是猜测你的程序,但你可以创建一个#ResultSet临时表并根据你的类型参数填充它,但总是返回所有列等。如果你返回很多行,这就变坏了,临时表是开销。在这种情况下,只需确保您的结果集返回相同数量的列:

IF @version=1
BEGIN
    SELECT col1, col2, NULL FROM ... WHERE ...
END
ELSE
BEGIN
    SELECT col1, col2, col3 FROM ... WHERE ...
END

然后,当父母双方都打电话给他们时,接受所有列,但他们可以忽略他们不需要的内容。

答案 1 :(得分:0)

菊花链存储过程通常不是一个好主意。我将删除对sproc的调用并输出t-sql以确切地提供所需内容。如果你真的打电话给另一个sproc。制作一个新的sproc,它可以完全满足您的需求。

关于Single Responsibility Principle

的全部内容