TimeStamp в SQL Server 2000 - PullRequest
       10

TimeStamp в SQL Server 2000

1 голос
/ 11 октября 2010

У меня есть таблица с именем Table1, которая содержит ID и 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

Моя хранимая процедура выглядит следующим образом

CREATE PROCEDURE [dbo].[Check] (
@XMLDoc  ntext
)AS
BEGIN
 SET NOCOUNT ON
 SET XACT_ABORT ON 

 DECLARE @ID  bigint
 DECLARE @TimeStamp  timestamp
 DECLARE @hDoc   int

 EXEC sp_xml_PrepareDocument @hDoc OUT, @XMLDoc

 SELECT   @ID  = ID
  ,@TimeStamp = [TimeStamp]
 FROM OPENXML (@hdoc,'/XML')
 WITH (   ID  bigint  'ID'
  ,[TimeStamp] timestamp 'TStamp')

 IF @@ERROR<>0 
 BEGIN
   EXEC sp_xml_RemoveDocument @hDoc 
   SELECT -620 AS RetVal
   RETURN   
 END

 IF NOT EXISTS(SELECT 1 FROM Table1 WHERE ID=  @ID AND Timestamp = @TimeStamp   )
 BEGIN
       SELECT -1 AS RetVal 
 END
         ELSE
         BEGIN
                SELECT 1 AS RetVal 
         END


END

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

@ TimeStamp неправильно разрешается из XML. Попробуйте CASTING это к двоичному (8).

Сохраненный процесс не соответствует запросу, который вы разместили ранее

1 голос
/ 11 октября 2010

Странно, запрос отлично работает для меня в SQL Server 2005, режим совместимости 80.

Единственное, что мне бросается в глаза, это то, что Timestamp является зарезервированным словом, так что я буду набезопасная сторона, вы можете добавить скобки вокруг Timestamp, чтобы избежать следующего:

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