【问题标题】:Create snapshot tables on first day of month with date in tablename - stored procedure在每月的第一天使用表名中的日期创建快照表 - 存储过程
【发布时间】:2017-09-27 23:51:17
【问题描述】:

我正在尝试在 SQL Server 中创建一个应检查当前日期的存储过程:如果今天是一个月的第一天,则创建一些表并在表名中包含昨天的日期。如果今天不是一个月的第一天,那么什么都不做。

想法应该是在日常 SSIS 包中简单地调用这个存储过程。

我正在努力添加“其他(什么都不做”)并将上一个日期添加到表名中。

这样的东西有用吗?我无法编译它...

DECLARE @d CHAR(10) = CONVERT(CHAR(8), dateadd(day,-1,GETDATE()), 112)

如果 DAY(GETDATE())=1 开始

DECLARE @table1name NVARCHAR(MAX) = CONCATENATE('snapshots_db.Table1_',@d);

选择 * 进入@table1name 来自 sales_db.Table1;

DECLARE @table2name NVARCHAR(MAX) = CONCATENATE('snapshots_db.Table2_',@d);

选择 * 进入@table2name 来自sales_db.Table2;

结束

否则 开始

1=1 结束

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

    您的代码似乎与您尝试实现的逻辑一致。对于'ELSE nothing'部分,你可以什么都不做,不要在该部分使用任何代码。我在上面对您的查询进行了格式化,以便您可以清楚地检查每个部分。

    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;
    

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2020-04-07
      • 2018-01-11
      • 1970-01-01
      • 2020-06-10
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      相关资源
      最近更新 更多