【发布时间】:2016-05-06 11:43:37
【问题描述】:
我收到“无法解决等于操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。错误。
错误出现在 SP 中,我没有在任何地方指定排序规则,无论是在创建表中还是在我使用时
select t.name, c.*, c.collation_name
from sys.columns c
left join sys.tables t
on c.object_id = t.object_id
order by c.collation_name
它说没有“Latin1_General_CI_AS”字段,所有字段都使用默认排序规则。我正在返回一个数据集,但看不到错误在哪里。没有连接。我再次填充一个临时表,但没有指定排序规则,但它说有错误。有什么建议么。使用 SQL Server 2014。
【问题讨论】:
-
好建议,但我在数据库中没有触发器。
-
“我再次填充临时表,没有指定排序规则” - 如果创建临时表,它将使用 tempdb 中的排序规则,可能不匹配您正在使用的数据库的排序规则。这可能是冲突的原因。尝试运行
SELECT collation_name FROM sys.databases WHERE name IN ('tempdb', 'YourDatabase'),看看你是否得到两个不同的排序规则 -
在我的开发机器上,SP 工作正常,但在生产服务器上却不行。你知道如何找出 SP 使用的是哪一个吗?
-
嗯,我按照你对 Gaz 的建议做了,确实,我得到了两个排序规则。无论如何解决这个问题?我在共享服务器上,所以可能无法使用。
-
您可以在过程中创建临时表时显式定义排序规则以避免冲突。或者您可以使用表变量而不是临时表(表变量从当前数据库继承排序规则)。共享服务器上的这些更改中的任何一个都应该没有问题。 This question 解决了类似的问题
标签: sql sql-server