2010-10-11 111 views
1

我有一个名为Table1的表,它包含一个IDTimeStampSQL Server 2000中的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 

回答

1

这是奇怪的,查询工作正常,我在SQL Server 2005中,兼容模式80

唯一跳出来的是Timestamp是一个保留字,所以为了安全起见,您可能需要添加各地Timestamp括号如下逃避它:

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

它不能在SQL 2000.Have为我工作ü在2000年选中此? – Adu 2010-10-13 06:22:34

+0

@Adu - 是的,这在SQL 2000中也适用于我。分别是ID和Timestamp“int”和“timestamp”的数据类型? – LittleBobbyTables 2010-10-13 12:57:42

+0

ID的数据类型是bigint – Adu 2010-10-13 13:23:20

1

@timestamp没有被从XML正确解析。尝试CASTing它二进制(8)。

存储的过程不符合您发布的查询较早