【问题标题】:SQL Server procedure - table every day - keep history once a monthSQL Server 过程 - 每天表 - 每月保存一次历史记录
【发布时间】:2018-09-08 03:10:11
【问题描述】:

我有程序在 SQL Server 中运行。我想每天运行那个程序。哪个会每天生成输出表?

但是,我只想每月保留一次历史记录。我尝试了以下程序,但它每天都会保留历史记录。

我该如何修改它;该表应该每天创建,但我只能每月保存一次历史记录,例如每个月的最后一天?

DECLARE @today AS DATE = CAST(GETDATE() AS DATE)

IF OBJECT_ID('[CI_Temp].[dbo].[Items_Scored_With_History]', 'U') IS NULL
    CREATE TABLE [CI_Temp].[dbo].[Items_Scored_With_History]
    (
        id         INT          NOT NULL,
        sub        VARCHAR(255) NOT NULL,
        actual     VARCHAR(255) NOT NULL,
        preds      VARCHAR(255) NOT NULL,
        prob       VARCHAR(255) NOT NULL,
        pred_eval  VARCHAR(255) NOT NULL,
        score_date DATETIME     NOT NULL,
    )
ELSE

DELETE FROM [CI_Temp].[dbo].[Items_Scored_With_History]
WHERE score_date = @today;

INSERT INTO [CI_Temp].[dbo].[Items_Scored_With_History]
SELECT id,
   sub,
   actual,
   preds,
   prob,
   pred_eval,
   @today AS score_date,
FROM [CI_Temp].[dbo].[Items_Scored_With_History] WITH (NOLOCK)

任何帮助将不胜感激 - 提前致谢!

【问题讨论】:

    标签: sql sql-server stored-procedures history


    【解决方案1】:

    如果您使用 SQL Server 2012 或更高版本的 SQL Server。

    您可以确定今天是否是月底。

    DECLARE @today AS DATE = CAST(GETDATE() AS DATE)
    
    IF EOMONTH(@today, 0)=convert(date, GETDATE()) BEGIN 
      PRINT 'Today is end of months'
            --your script will be here. 
      END 
      ELSE
      PRINT 'Today is not end of the month'
    

    【讨论】:

    • EOMONTH() 可从 SQL Server 获得(从 2012 年开始)。
    • @Başar Kaya 抱歉太天真了。我应该在上面的过程中添加这个条件。您能否详细说明并帮助我嵌入建议的条件,以便我有工作程序。谢谢提前
    • @JamesTaylor 我编辑了我的答案,它显示了您可以移至脚本的位置。
    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多