SQL Server列是相等的,但显示不相等.他们有什么不同?



我有以下代码

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

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

如果类型不同,

CHECKSUM将返回不同的值。详见MSDN校验和。我想在你的情况下,Name &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

解决的奥秘是,UniqueId末尾的间距是ASCII字符(10),而不是我认为的空白。这就是为什么它们是不相等的。所以我添加了这个代码

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

在notepad++中,我认为我已经添加了ASCII(10)(换行),但显然没有。我接受@Venkataraman R的答案,因为他是正确的。谢谢你的帮助。

最新更新