在 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 行,您的触发器将触发 一次,并且触发器内的 Inserted
和 Deleted
伪表将包含 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 的最佳方法是啥?