排序规则冲突ERROR,将存储过程的排序规则设置为数据库默认值

时间:2012-12-03 04:46:37

标签: sql sql-server collation

如何将存储过程的COLLATION设置为数据库缺省值,而不是该过程中的单个表列。

Cannot resolve the collation conflict between “SQL_Latin1_General_Pref_CP1_CI_AS” and “Latin1_General_CI_AS” in the equal to operation

我收到排序规则冲突错误,因为数据库服务器排序规则与数据库排序规则不同。该过程非常庞大,我不知道哪个表列发生了冲突。

是否可以为存储过程分配排序规则,以使该过程中的所有列具有相同的排序规则?

1 个答案:

答案 0 :(得分:6)

首先,整理是关于文本数据如何存储在表中而不是存储过程级别。

当文本数据与未存储文本整理的来源进行比较时,会出现整理问题。 (我不是在谈论文本的数据类型,只是字符串数据)

检查TSQL where子句或表连接,这是发生文本比较的最常见位置。您可以使用比较区域旁边的collat​​e函数整理到数据库默认值。例如

SELECT
c.CustomerID
FROM
dbo.Customer c
INNER JOIN dbo.CustomerLog cl on c.CustomerName = cl.LogEntry collate     
database_default

根据您的情况,这可能无法实现,但我始终遵循这些规则。
- 在安装时选择正确的服务器默认排序规则,以便在排序规则下创建tempdb,在创建临时表时,这些是在tempdb中创建的
- 创建表时除非有特定原因

,否则不指定排序规则