Sql server SQL Server无法将排序规则类型SQL\u Latin1\u General\u CP1\u CI\u的数据修剪为

Sql server SQL Server无法将排序规则类型SQL\u Latin1\u General\u CP1\u CI\u的数据修剪为,sql-server,collation,trim,Sql Server,Collation,Trim,我们有两个数据库,一个是旧的,有排序规则-SQL\u Latin1\u General\u CP1\u CI\u AS,另一个是新的,有排序规则-Latin1\u General\u CI\u AI(可能是默认的) 两个数据库中都有一个简单的表1(ID(int),代码(nvarchar(50)))。我想做的是比较两个表的数据,找到丢失的或额外的记录 Sample data in old table has code like : 'Code1 ' Sample data in new

我们有两个数据库,一个是旧的,有排序规则-SQL\u Latin1\u General\u CP1\u CI\u AS,另一个是新的,有排序规则-Latin1\u General\u CI\u AI(可能是默认的)

两个数据库中都有一个简单的表1(ID(int),代码(nvarchar(50)))。我想做的是比较两个表的数据,找到丢失的或额外的记录

Sample data in old table has code like : 'Code1      '
Sample data in new table has code like : 'Code1  '
我需要做的是比较这两个数据(从“名称”列)。我无法从旧表中删除数据-

示例:

SELECT LTRIM(RTRIM([Name])) from [OLDDB].dbo.Table1
returns 'Code1     '       -- NOT as expected (probably due to mis-match in charset

SELECT LTRIM(RTRIM([Name])) from [NEWDB].dbo.Table1
'Code1'                    -- as expected
我希望这是有道理的。此外,即使我在列级别更改排序规则,我仍然无法获得ltrim/rtrim工作

谢谢。

如果字符(160)是问题所在,那么您不必更改排序规则。只要用适当的空格替换那些字符(160),RTRIM就可以工作了


从[OLDDB].dbo.Table1中选择LTRIM(RTRIM(替换([Name],CHAR(160),“”)),尝试下面的更新,希望这能解决问题


update[OLDDB].dbo.Table1 set Name RTRIM(replace(Name,char(160),char(32))

我刚刚创建了两个具有这些精确排序规则的数据库,尝试了代码,但没有遇到这种行为。OLDDB中的列数据是否可能包含其他类型的空格,例如RTRIM不修剪的CHAR(160)?使用
从OLDDB.dbo.Table1中选择名称进行检查,其中CHARINDEX(CHAR(160),Name)0
谢谢。是的,它似乎是char(160),我检查了上面的查询并返回非零。无论如何,基于此导出LTRIM RTRIM?我相信在每个列级别更改排序规则是一个漫长的过程!DB太大,在所有表上应用更改不是一个容易的选择。