2013-10-22 139 views
0

我想从具有给定字段值的表中检索记录。查询是:SQL查询不返回记录

declare @imei varchar(50) 
set @imei = 'ee262b57-ccb4-4a2b-8410-6d8621fd9328' 

select * 
from tblDevices 
where imei = @imei 

它不返回任何内容。

如果我注释掉where子句中的所有记录,包括我正在查找的那个。该值显然在表字段中并且完全匹配,但我无法获得where子句的工作。

我从字面上将表中的值复制出来以确保它是正确的。

我很感激任何关于我的错误的指导。

表DEF:

CREATE TABLE [dbo].[tblDevices](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [create_date] [datetime] NOT NULL, 
    [update_date] [datetime] NOT NULL, 
    [other_id] [int] NULL, 
    [description] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [authorized] [int] NOT NULL, 
    [imei] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
CONSTRAINT [PK_tblDevices] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

编辑

使用user2864740建议,我询问了以下内容:

select hashbytes('SHA1', imei) as h1 from tblDevices where id =8 

returns: 
0x43F9067C174B2F2F2C0FFD17B9AC7F54B3C630A2 

select hashbytes('SHA1', @imei) as h2 

returns: 
0xB9B82BB440B04729B2829B335E6D6B450572D2AB 

所以,我不知道这意味着什么。我可怜的小脑子难以理解A <> A ?!如果这不是一个排序问题,这里发生了什么?两个相同的值如何不被视为相等?

编辑2

这是表记录我想:

8   2013-10-22 12:43:10.223 2013-10-22 12:43:10.223 -1               1   ee262b57-ccb4-4a2b-8410-6d8621fd9328 
+0

imei和@imei的数据类型是否相同?例如nvarchar或varchar? –

+0

你试过用'like'代替=? –

+0

是的,我试过''喜欢',我用'LTRIM'和'RTRIM'包装了@imei。没有工作。 –

回答

0

还挺服用野生刺,但有两个散列显示他们其实不同,想知道如果你只是有某处有额外空间可能试试:

select * 
from tblDevices 
where Trim(imei) = (@imei) 
+0

没有额外的空间,当我将表中的数据复制出来时,这些空间会被捕获。这是一个不可打印的,不可显示的角色,以某种方式进入该领域。我仍在摸索如何发生 - 但采取对策防止未来发生。 –

+0

如果您阅读了评论,您会注意到这些技巧已被涵盖 - 并且顺便没有删除违规角色。 :^) –