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

时间:2013-08-15 18:55:30

标签: sql-server timestamp

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

2 个答案:

答案 0 :(得分:3)

创建的时间戳很简单:类型为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

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

您需要了解 SQL Server中的触发器每个语句 - 而不是每行!因此,如果您的UPDATE语句更新50行,则触发器将触发一次,触发器内的InsertedDeleted伪表将包含 50行来处理。

答案 1 :(得分: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'