我正在尝试在SQL Server中创建一个应该检查当前日期的存储过程:如果今天是一个月的第一天,那么创建一些表并在表名中包含昨天的日期。如果今天不是一个月的第一天,那就什么都不做。
这个想法可以简单地在每日SSIS包中调用这个存储过程。
我正在努力添加“else(不做任何事情”)并将之前的日期添加到表名中。
这样的事情会起作用吗?我无法编译......
DECLARE @d CHAR(10) = CONVERT(CHAR(8), dateadd(day,-1,GETDATE()), 112)
IF DAY(GETDATE())=1
BEGIN
DECLARE @table1name NVARCHAR(MAX) = CONCATENATE('snapshots_db.Table1_',@d);
select *
into @table1name
from sales_db.Table1;
DECLARE @table2name NVARCHAR(MAX) = CONCATENATE('snapshots_db.Table2_',@d);
select *
into @table2name
from sales_db.Table2;
END
ELSE
BEGIN
1=1
END
答案 0 :(得分:0)
您的代码似乎与您尝试实现的逻辑一致。因为没有什么'另一方面,你可以随便做什么,不要使用该部分中的任何代码。我在上面格式化了您的查询,因此您可以清楚地检查每个部分。
DECLARE @d CHAR(10),
@table1name NVARCHAR(MAX),
@table2name NVARCHAR(MAX);
SET @d = CONVERT(CHAR(8), dateadd(day,-1,GETDATE()), 112);
SET @table1name = CONCATENATE('snapshots_db.Table1_',@d);
SET @table2name = CONCATENATE('snapshots_db.Table2_',@d);
IF DAY(GETDATE())=1
BEGIN
SELECT *
INTO @table1name
FROM sales_db.Table1;
SELECT *
INTO @table2name
FROM sales_db.Table2;
END;