在tablename - storage procedure中的日期的第一天创建快照表

时间:2017-09-27 23:51:18

标签: sql sql-server stored-procedures

我正在尝试在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

1 个答案:

答案 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;