【问题标题】:created and modified timestamp in sql server 2008在 sql server 2008 中创建和修改时间戳
【发布时间】:2013-08-18 01:17:49
【问题描述】:

我是 SQL 新手,我想为 createdtime 和 modifiedtime 列创建时间戳。 然后将 createdtime 与 modifiedtime 进行比较,如果 modifiedtime 大于 10 分钟,则不会让该行被更新。 我怎样才能做到这一点? 我正在使用 sql server 2008 R2 谢谢

【问题讨论】:

    标签: sql-server timestamp


    【解决方案1】:

    创建时间戳很简单:DATETIME 类型的列(适用于 2005 年之前的 SQL Server)或 DATETIME2(3)(2008 年或更新版本)和 DEFAULT CONSTRAINT SYSDATETIME()

    SQL Server 2000/2005:

    CREATE TABLE dbo.YourTable 
     ( ..... your columns ......,
       CreatedTimeStamp DATETIME NOT NULL
           CONSTRAINT DF_YourTable_Created DEFAULT (GETDATE())
     )
    

    SQL Server 2008 及更新版本:

    CREATE TABLE dbo.YourTable 
     ( ..... your columns ......,
       CreatedTimeStamp DATETIME2(3) NOT NULL
           CONSTRAINT DF_YourTable_Created DEFAULT (SYSDATETIME())
     )
    

    修改后的时间戳必须用每个表上的触发器来处理

    CREATE TRIGGER trgYourTableModified
    AFTER UPDATE ON dbo.YourTable
    AS
        UPDATE dbo.YourTable
        SET ModifiedDate = GETDATE()  -- or use SYSDATETIME() for 2008 and newer
        FROM Inserted i
        WHERE i.ID = dbo.YourTable.ID
    

    在此触发器中,您还可以检查 10 分钟的间隔 - 如果差异超过 10 分钟,只需在触发器中调用 ROLLBACK TRANSACTION 以停止更新

    您需要意识到 SQL Server 中的触发器是每条语句 - 而不是每行!因此,如果您的 UPDATE 语句更新 50 行,您的触发器将触发 一次,并且触发器内的 InsertedDeleted 伪表将包含 50 行处理。

    【讨论】:

      【解决方案2】:
      Declare @CreatedTime Datetime, @ModifiedTime DateTime
      Set @CreatedTime='2013-08-15 14:10:00'
      Set @ModifiedTime='2013-08-15 14:50:00'
      
      
      if(dateDiff(Minute,@CreatedTime,@ModifiedTime)<10)
      Update Statement
      Else
      Print 'Table Can not be updated'
      

      【讨论】:

      • 感谢您已经将时间和日期设置为当前时间,但我想使用当前时间意味着在第一次输入时自动设置存储数据。
      猜你喜欢
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多