SQL Server列相等但显示不相等。他们有什么不同?

时间:2016-10-14 04:41:32

标签: sql sql-server checksum

我有以下代码

select 
    Name, UniqueId, 
    checksum(Name) as CheckName, 
    checksum(UniqueId) as CheckId
from 
    DataManagementPipeline.dbo.pod_1801_energex_vegetation_zones 
where 
   Name <> UniqueId 

结果如下

Name        UniqueId        CheckName      CheckId
********************************************************
VZ-4820/73  VZ-4820/73     -1880307869     -21513965
VZ-400706   VZ-400706       591267130      536293334

值是相同的(空白和所有)但它们看起来是不同的,有趣的是校验和是不同的。这是一个编码问题,为什么他们是不同的?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果类型不同,

CHECKSUM将返回不同的值。点击MSDN Checksum了解更多信息。我想在你的情况下,名称&amp; UniqueId 属于不同类型。请参阅下面的示例代码

CREATE TABLE test(origname varchar(36), uniqueid nvarchar(36))

INSERT INTO test(origname,uniqueid)
values ('venkat',N'venkat')

SELECT CHECKSUM(origname), CHECKSUM(uniqueid) FROM test

-- Returned Values 
178987073   1792344567

答案 1 :(得分:0)

解开的谜团是,UniqueId末尾的间距是ASCII字符(10)而不是我认为的白色空间。因此,为什么他们的表现不平等。所以我添加了这段代码

ltrim(rtrim(Name)) <> rtrim(ltrim(REPLACE(REPLACE(UniqueId, CHAR(13), ''), CHAR(10), ''))) 

在记事本++中我以为我添加了ASCII(10)(换行)但显然没有。我会接受@Venkataraman R的答案,因为他是对的。谢谢你的帮助。