我有一个存储过程,可以从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的值,但我似乎无法找到这样做的方法。
感谢。
谢
答案 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