sql中的TimeStamp

时间:2010-11-06 06:17:00

标签: sql-server

我有一个名为Table1的表,其中包含一个ID和TimeStamp。

表格结构

ID  TimeStamp 
1   0x0000000000047509 

但是当我比较这些字段的组合时,它总是显示为false。这是什么原因?

我的查询是:

 DECLARE @ID int 
 DECLARE  @TimeStamp  timestamp 

 SET @ID = 1 
 SET @TimeStamp = 0x0000000000047509 

 If EXISTS(SELECT 1 FROM Table1 WHERE ID = @ID AND TimeStamP = @TimeStamp) 

 BEGIN 
       SELECT 1 AS RetVal 
 END 

 ELSE 

 BEGIN 
       SELECT -1 AS RetVal     
 END 

这只能在查询分析器中使用。但这不适用于存储过程。对此有何解决方案?

2 个答案:

答案 0 :(得分:2)

如果我记得,SQL服务器中的TimeStamp实际上并不是时间戳,而是主要用于内部使用(我曾经使用TimeStamps来获取MySQL中的最新更新类型字段,但这似乎不是SQL Server中的正确类型)。我相信你只想根据你想要的准确度使用datetime或datetime2数据类型。

以下是可用选项的链接:http://msdn.microsoft.com/en-us/library/ms186724.aspx

答案 1 :(得分:1)

它应该可以工作,我自己尝试过并且工作正常。我从SP运行以下命令并输出OK。

DECLARE @t timestamp
SET @t = 0x00000000000055F5

IF EXISTS(SELECT 1 FROM dbo.[User] WHERE [Timestamp]=@t AND UserId=10)
BEGIN
    PRINT 'OK'
END

在SP运行之前,您的时间戳可能已更改。每次插入或更新行时,时间戳都会更改。真的是rowversion是一个更好的名称恕我直言。

良好的重点:timestampTimestamps vs Datetime data types