我是SQL新手,我想为createdtime和modifiedtime列创建时间戳。 然后将createdtime与modifiedtime进行比较,如果modifiedtime大于10分钟,则不会让行更新。 我怎样才能做到这一点? 我正在使用sql server 2008 R2 感谢
答案 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行,则触发器将触发一次,触发器内的Inserted
和Deleted
伪表将包含 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'