2010-11-06 58 views
1

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

表结构

ID TimeStamp 
1 0x0000000000047509 

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

我的查询是:

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 

这将只需在查询工作analyzer.But这不会在存储过程中的工作。任何解决方案?

+2

TIMESTAMP已被弃用。改用ROWVERSION。 ROWVERSION是同一件事,但名称更改很重要,因为TIMESTAMP意味着标准SQL中的其他内容。 – sqlvogel 2010-11-06 08:30:31

+0

相同的用户,[SQL Server 2000中的TimeStamp]的确切副本(http://stackoverflow.com/questions/3907620/timestamp-in-sql-server-2000)这个其他问题也有更多相关的信息。上面的查询不是实际发生的事情。 – gbn 2010-11-21 08:47:20

回答

2

如果我回想起来,SQL服务器中的TimeStamp实际上并不是一个时间戳,但是主要用于内部使用(我曾经使用TimeStamps作为MySQL中最后更新的类型字段,但它不是SQL Server中的正确类型) 。我相信你只是想使用一个日期时间或datetime2数据类型取决于你想要的准确性。

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

1

它应该工作,我已经尝试过了自己和它工作得很好。我从SP运行以下内容并输出OK。

DECLARE @t timestamp 
SET @t = 0x00000000000055F5 

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

也许你的时间戳在SP运行之前已经改变了。每次插入或更新行时,时间戳都会更改。真正排队是一个更好的名字,恕我直言。

好resrouces:timestampTimestamps vs Datetime data types

+0

它在存储过程中工作吗? – Adu 2010-11-06 07:16:32

+0

是的,只是将这个事实添加到答案 – Iain 2010-11-06 07:17:14

+0

也许尝试将此添加到SP并查看结果是什么: SELECT TimeStamp FROM Table1 WHERE ID = @ID – Iain 2010-11-06 07:20:39