5

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

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

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

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

4

1 回答 1

6

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

比较来自文本排序规则存储不同的源的文本数据时,会出现排序规则问题。(我不是在说文本的数据类型,只是字符串数据)

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

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

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

于 2013-01-08T22:57:16.333 回答