目标:创建一个存储过程来自动执行此报告,以便当运行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中包装任何后续插入或更新。 –