这是我对存储过程(使用SQL Server 2005)的一个问题,在这个存储过程中,它调用另一个存储过程将数据放入临时表。
INSERT INTO #tmpTable (Column1, Column2, Column3)
EXEC psp_rptInsideStoredprocedure 2
此内部存储过程有一个mode参数,用于确定传递哪些列。在此模式(模式2)中,只有3列被传出,当此内部存储过程用于另一个报表(模式1)时,4列被传递出去。有时,父存储过程会抱怨尝试插入4列,有时不会。
我知道它总是在模式2中传递但是就像SQL Server知道有时这个存储过程已经传回了4列。
对解决方案的任何想法?
由于
唐
答案 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,它可以完全满足您的需求。
的全部内容