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