在 sql server 2008 中创建和修改时间戳

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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'

【讨论】:

感谢您已经将时间和日期设置为当前时间,但我想使用当前时间意味着在第一次输入时自动设置存储数据。

以上是关于在 sql server 2008 中创建和修改时间戳的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中创建和查询链接数据库服务器?

如何在 SQL Server 中创建和查询链接数据库服务器?

在 SQL Server 中创建和管理全局 Procs 和 UDF 的最佳方法是啥?

如何在 SQL Server 2005 中创建和维护最近 7 天的分区视图和存档记录?

在 SQL 中创建和更改表值函数时对象类型不兼容

如何在 MFC 常规 DLL 中创建和使用 CFormView? (视觉工作室 2008)