Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server列相等,但显示不相等。它们有何不同?_Sql_Sql Server_Checksum - Fatal编程技术网

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”,则检索的值将/必须相同。