在另一个的From中使用Stored Procedure参数

时间:2014-11-19 09:26:00

标签: stored-procedures

我有一个存储过程,可以从eForm表中输出总数。我想使用此存储过程从其他eForm表中提取数据,因此希望使用参数替换From子句中的eForm表名。我已经阅读了其他问题,但找不到一个有助于在From中使用参数的问题。此存储过程的代码如下所示 -

IF OBJECT_ID ('sp_SelectEformMonthlyTotals') IS NOT NULL
DROP PROCEDURE sp_SelectEformMonthlyTotals

GO

CREATE PROCEDURE sp_SelectEformMonthlyTotals @EFORMNAME VARCHAR (200) = ''
AS
CREATE TABLE    #TEMP (EFORMNAME VARCHAR (200))
INSERT INTO #TEMP

EXEC sp_UpdateEForm @EFORMNAME

SELECT ....

FROM @EFORMNAME T1 INNER JOIN FLODS_CASE_ENQUIRY_F00 T2 ON T1.EFORM_CASE_ENQUIRY_ID = T2.CASE_ENQUIRY_ID

WHERE    T2.CREATED_DT >= '2012-04-02'
GROUP BY MONTH(T2.CREATED_DT), YEAR(T2.CREATED_DT)) T3
ORDER BY YEAR, MONTH_NUMBER

DROP TABLE #TEMP

这是许多人的最新尝试,现在包括第二个名为sp_UpdateEForm的存储过程 -

IF OBJECT_ID ('sp_UpdateEForm') IS NOT NULL
DROP PROCEDURE  sp_UpdateEForm

GO

CREATE PROCEDURE sp_UpdateEForm @EFORMNAME VARCHAR (200) = ''
AS
UPDATE FRANCIS
SET eFormName = @EFORMNAME

我创建了Francis表来保存eFormName。我可以看到我需要在sp_SelectEformMonthlyTotals完成之前设置@EFORMNAME的值,但我似乎无法找到这样做的方法。

感谢。

1 个答案:

答案 0 :(得分:0)

您只需要为此使用动态查询;

CREATE PROCEDURE sp_SelectEformMonthlyTotals @EFORMNAME VARCHAR (200) = ''
AS
CREATE TABLE    #TEMP (EFORMNAME VARCHAR (200))
INSERT INTO #TEMP

EXEC sp_UpdateEForm @EFORMNAME

DECLARE @sSQL AS VARCHAR(2000), @DateCreated as varchar(10)
SET @DateCreated = '2012-04-02'

SET @sSQL = 'SELECT .... '
SET @sSQL = @sSQL + ' FROM ' + @EFORMNAME + ' T1 INNER JOIN FLODS_CASE_ENQUIRY_F00 T2 ON T1.EFORM_CASE_ENQUIRY_ID = T2.CASE_ENQUIRY_ID '

SET @sSQL = @sSQL + ' WHERE    T2.CREATED_DT >= '' + @DateCreated + '''
SET @sSQL = @sSQL + ' GROUP BY MONTH(T2.CREATED_DT), YEAR(T2.CREATED_DT)) T3'
SET @sSQL = @sSQL + ' ORDER BY YEAR, MONTH_NUMBER'

exec @sSQL

DROP TABLE #TEMP