SQL查询不返回记录

时间:2013-10-22 18:19:39

标签: sql sql-server-2005 where-clause

我正在尝试从具有给定字段值的表中检索记录。查询是:

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

select *
from tblDevices
where imei = @imei

不返回任何内容。

如果我注释掉where子句,则返回所有记录,包括我要查找的记录。该值显然位于表字段中并且完全匹配,但我无法使where子句起作用。

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

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

表格定义

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<>一个?!如果这不是整理问题,那么这里发生了什么?如何将两个相同的值视为相等?

修改2

这是我想要的表记录:

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

1 个答案:

答案 0 :(得分:0)

有点采取疯狂刺,但两个哈希显示他们实际上是不同的,想知道你是否只是在某个地方有一个额外的空间也许尝试:

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