2010-11-06 80 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

相關問題