我有以下代码
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的答案,因为他是正确的。谢谢你的帮助。