3

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

4

2 回答 2

6

创建时间戳很简单:类型列DATETIME(SQL Server 最高 2005)或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 行,您的触发器将触发一次Inserted并且Deleted触发器内的伪表将包含50 行要处理。

于 2013-08-15T19:01:44.727 回答
0
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'
于 2013-08-15T19:02:52.950 回答