目標:創建一個存儲過程來自動執行此報告,以便當運行execute NameOfStoredProc
時,它會執行所有3個塊並返回塊3中的查詢SQL Server T-SQL:使用存儲過程自動重新執行SQL報告
對於表格,我希望它是基於getdate()
的動態。
(我沒有張貼實際的表元素和記錄,但如果需要,我可以彌補一些B/C的實際數據是敏感的)
- 數據庫:
FY1516
- 從表:
v_all_claim
(實際上是視圖)進入表 - :
March2017_Payments
下面是我手工執行生成報告的代碼。
塊1:
--creates payment table
SELECT Recipient_ID, DOP, Provider_ID, program_code, poverty_code
INTO FY1516..March2017_Payments
FROM FY1516..v_all_Claim
WHERE amount <> 0
AND DOP BETWEEN '20170301' AND '20170331'
2座:
-- add one column to the table created in block 1, sets default value to '' and update to Y
-- if certain constraints are met
ALTER TABLE FY1516..March2017_Payments
ADD TITLE21_Flag varchar(1);
GO
UPDATE FY1516..March2017_Payments
SET TITLE21_Flag = ''
GO
UPDATE FY1516..March2017_Payments
SET TITLE21_Flag = 'Y'
WHERE program_code IN ('A', 'B', 'C')
3座與SELECT語句被複制到Excel:
SELECT *
FROM FY1516..March2017_Payments
我嘗試迄今:
@start
和@end
是between @start and @end
@previousMonth
給比上月@previousMonthYear
的前3個字母給比上月
希望能@previousMonth [email protected] +"_Payments"
可以是表名
USE FY1516
CREATE PROCEDURE NameOfStoredProc
AS
DECLARE @start VARCHAR(8), @end VARCHAR(8),
@previousMonth VARCHAR(3), @previousMonthYear VARCHAR(4);
SET @start = CONVERT(VARCHAR(8), DATEADD(MONTH, DATEDIFF(MONHT, 0, GETDATE()) - 1, 0), 112)
SET @end = CONVERT(VARCHAR(8), DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()) - 1, -1), 112)
SET @previousMonth = LEFT(DATENAME(MONTH, DATEADD(MONTH, -1, GETDATE())), 3)
SET @previousMonthYear = YEAR(DATEADD(MONTH, -1, GETDATE()))
的YYYY
因此,您正在尋找一種基於@previousMonth + @ previousMonthYear +「_ Payments」作爲文件名動態創建表的方法? –
是的。這是關鍵部分。我有一個工作代碼存儲過程,它使用STATIC表名創建表。但是我不能在同一個過程中包含更新命令,因爲表格不是在存儲過程中創建的,而是僅在'execute'之後創建的。我想我可以創建第二個存儲過程來執行第一個存儲過程,並將其更新到創建的表中。 –
看看我的答案。您可以使用一個存儲過程。該表將在'sp_executesql'命令之後提供。但是,如果您正在以編程方式執行所有操作,則可能需要在動態SQL中包裝任何後續插入或更新。 –