我有一个名为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
这只能在查询分析器中使用。但这不适用于存储过程。对此有何解决方案?
答案 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是一个更好的名称恕我直言。