Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 Server上使用不同的排序规则跨两个数据库执行联接并获取错误_Sql Server_Tsql_Collation - Fatal编程技术网

Sql server 在SQL Server上使用不同的排序规则跨两个数据库执行联接并获取错误

Sql server 在SQL Server上使用不同的排序规则跨两个数据库执行联接并获取错误,sql-server,tsql,collation,Sql Server,Tsql,Collation,我知道,我知道我在问题中所写的我不应该感到惊讶。但我的情况是在继承的POS系统上缓慢工作,我的前任显然不知道连接,所以当我查看一个加载了60秒的内部页面时,我发现这是一个相当快的过程,将这8个查询重写为一个带有连接的查询。问题是,除了不知道连接之外,他似乎还对多个数据库有着狂热的爱好,令人惊讶的是,它们使用不同的排序规则。事实上,我们使用所有的“正常”拉丁字符,说英语的人会考虑整个字母表,这整个事情将在几个月内停止使用,所以我只需要一个创可贴。 长话短说,我需要某种方法来转换为单个排序规则,这样

我知道,我知道我在问题中所写的我不应该感到惊讶。但我的情况是在继承的POS系统上缓慢工作,我的前任显然不知道连接,所以当我查看一个加载了60秒的内部页面时,我发现这是一个相当快的过程,将这8个查询重写为一个带有连接的查询。问题是,除了不知道连接之外,他似乎还对多个数据库有着狂热的爱好,令人惊讶的是,它们使用不同的排序规则。事实上,我们使用所有的“正常”拉丁字符,说英语的人会考虑整个字母表,这整个事情将在几个月内停止使用,所以我只需要一个创可贴。 长话短说,我需要某种方法来转换为单个排序规则,这样我就可以比较两个数据库中的两个字段

确切的错误是:

无法解决排序规则冲突 之间 “SQL拉丁通用CP850 CI AI”和 在 等于操作


您可以在查询中使用collate子句(我现在找不到我的示例,所以我的语法可能是错误的-我希望它为您指明了正确的方向)


一种通用的方法是将排序规则强制为数据库默认值。这将删除可能更改的排序规则名称的硬编码

对于临时表和表变量,以及您可能不知道服务器排序规则的情况,它也很有用(例如,您是供应商,将系统放置在客户的服务器上)


最好使用默认回退,而不是检查不同的排序规则。Donno为什么相同的数据库在不同的位置获得不同的排序规则:(
select sone_field collate SQL_Latin1_General_CP850_CI_AI
  from table_1
    inner join table_2
      on (table_1.field collate SQL_Latin1_General_CP850_CI_AI = table_2.field)
  where whatever
select
    sone_field collate DATABASE_DEFAULT
from
    table_1
    inner join
    table_2 on table_1.field collate DATABASE_DEFAULT = table_2.field
where whatever