SQL Server列相等,但显示不相等。它们有何不同?
我有以下代码SQL Server列相等,但显示不相等。它们有何不同?,sql,sql-server,checksum,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 值是相同的(空白和全部),但它们看起来不同,有趣的是校验和不同。为什么它们不同
select
Name, UniqueId,
checksum(Name) as CheckName,
checksum(UniqueId) as CheckId
from
DataManagementPipeline.dbo.pod_1801_energex_vegetation_zones
where
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
如果类型不同,
校验和
将返回不同的值。更多信息请访问。我认为在你的情况下,名字和唯一性是不同的类型。请参见下面的示例代码
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), '')))
ltrim(rtrim(Name))rtrim(ltrim(替换(替换(UniqueId,CHAR(13),“”),CHAR(10),“”)))
在记事本++中,我以为我添加了ASCII(10)(换行符),但显然没有。我将接受@Venkataraman R的回答,因为他是正确的。谢谢你的帮助。解开的谜团是UniqueId末尾的空格是ASCII字符(10),而不是我认为的空格。因此,他们被认为是不平等的。所以我添加了这个代码
ltrim(rtrim(Name)) <> rtrim(ltrim(REPLACE(REPLACE(UniqueId, CHAR(13), ''), CHAR(10), '')))
ltrim(rtrim(Name))rtrim(ltrim(替换(替换(UniqueId,CHAR(13),“”),CHAR(10),“”)))
在记事本++中,我以为我添加了ASCII(10)(换行符),但显然没有。我将接受@Venkataraman R的回答,因为他是正确的。谢谢您的帮助。我认为“Name,UniqueId”的数据类型是nvarchar。两种数据类型都是varchar。名称为varchar(max),UniqueId为varchar(100)。但这两个字符串显然都比这个小,所以应该不会有什么不同。如果这个条件“Name UniqueId”满足,那么据我所知,将不会检索到值……你如何为此生成输出这是个谜。它们在记事本++等中的值相同。它们看起来相同,但满足要求。校验和显示了一些奇怪的东西,但我无法指出。如果两个数据类型相同,则在输出中检索到的值将是相同的名称UniqueId CheckName CheckId VZ-4820/73 VZ-4820/73 1347317154 1347317154 VZ-400706 VZ-400706 1426899811 1426899811我认为“名称,UniqueId”的数据类型是nvarchar。数据类型都是varchar。名称为varchar(max),UniqueId为varchar(100)。但这两个字符串显然都比这个小,所以应该不会有什么不同。如果这个条件“Name UniqueId”满足,那么据我所知,将不会检索到值……你如何为此生成输出这是个谜。它们在记事本++等中的值相同。它们看起来相同,但满足要求。校验和显示了一些奇怪的东西,但我无法指出。如果两个数据类型相同,则在输出中检索到的值将是相同的名称UniqueId CheckName CheckId VZ-4820/73 VZ-4820/73 1347317154 1347317154 VZ-400706 VZ-400706 1426899811 1426899811 Name和UniqueId分别为varchar(max)和varchar(100)分别。我试过将您的案例命名为“varchar(max)和varchar(100)”。我可以在值相同的情况下得到输出,它们都是varchar且大小相同,这一事实不应使它们不相等。所以谜团还在继续。@Raja Yuvi你是说它们满足并因此返回还是不满足?@EmptyWaterHoles如果不应该检索“Name UniqueId”值,如果“Name=UniqueId”,则检索到的值将/必须相同。Name和UniqueId分别是varchar(max)和varchar(100)。我已经尝试过将您的案例作为示例“varchar(max)和varchar(100)”。我可以在值相同的情况下得到输出。它们都是varchar且大小相同的事实不应该使它们不相等。所以谜团还在继续。@Raja Yuvi你是说它们满足并因此返回还是不满足?@EmptyWaterHoles if“Name UniqueId”不应检索值,如果“Name=UniqueId”,则检索的值将/必须相同。