日期:2014-05-18  浏览次数:20422 次

在存储过程中调用另一个存储过程的问题?
CREATE   PROCEDURE   [dbo].[spMRViewToProc]  
@FromDbName   varchar(50),
@ToDbName   varchar(50)
AS
exec( 'SELECT   '+@FromDbName+ '.dbo.materialrequest.*,   ISNULL( '+@ToDbName+ '.dbo.materialrequestContrast.ModifyDate,  
            '+@FromDbName+ '.dbo.materialrequest.InputDate)   AS   ModifyDate
FROM   '+@FromDbName+ '.dbo.materialrequest   LEFT   OUTER   JOIN
            '+@ToDbName+ '.dbo.materialrequestContrast   ON  
            '+@FromDbName+ '.dbo.materialrequest.MaterialRequestID   =   '+@ToDbName+ '.dbo.materialrequestContrast.MaterialRequestID ')
GO

CREATE   PROCEDURE   [dbo].[spTest]  
@FromDbName   varchar(50),
@ToDbName   varchar(50)
AS
???
EXEC( 'INSERT   INTO   MRViewToProc   EXEC   spMRViewToProc   '+@FromDbName+ ',   '+@ToDbName+ ' ')
???
GO

spMRViewToProc存储过程返回结果集的数据列非常多,我想把spMRViewToProc存储过程返回的结果集存储到一个临时表里,一开始我建了一个表MRViewToProc,结构和spMRViewToProc存储过程返回结果集的结构完全一样,可是执行时出现错误,服务器:   消息   213,级别   16,状态   5,行   1
插入错误:   列名或所提供值的数目与表定义不匹配。我又看了好几遍发现结构一样,
请问有没有什么方法实现把spMRViewToProc存储过程返回结果集存储到一个临时表里,而不用一一定义每个列的类型????

------解决方案--------------------
CREATE PROCEDURE [dbo].[spTest]
@FromDbName varchar(50),
@ToDbName varchar(50)
AS

exec( 'INSERT INTO MRViewToProc EXEC spMRViewToProc ' ' '+@FromDbName+ ' ' ', ' ' '+@ToDbName+ ' ' ' ')
------解决方案--------------------
嗯,平时引用变量用一个单引号,但是如果是包含在一组单引号中的话,那么里面的单引号就要变成 ' '来转义