此规则检查用户定义数据库是否通过使用与主数据库或模型数据库相同的排序规则来定义这些数据库。
最佳做法建议
建议用户定义的数据库的排序规则与主数据库或模型的排序规则匹配。 否则,可能会发生可能阻止代码执行的排序规则冲突。 例如,当存储过程将一个表联接到临时表时,如果用户定义的数据库和模型数据库的排序规则不同,SQL Server 可能会结束批处理并返回排序规则冲突错误。 之所以发生这种情况,是因为临时表会在 tempdb 中创建,而 tempdb 的排序规则基于 model 数据库的排序规则。
如果遇到排序规则冲突错误,请考虑以下的解决方案之一:
从用户数据库导出数据,并将其导入与主数据库和模型数据库具有相同排序规则的新表中。
重新生成系统数据库,使其使用与用户数据库排序规则相匹配的排序规则。 有关如何重新生成系统数据库的详细信息,请参阅 “重新生成系统数据库”。
修改将用户表联接到 tempdb 中的表的任何存储过程,以使用用户数据库的排序规则在 tempdb 中创建表。 为此,请将
COLLATE database_default子句添加到临时表的列定义,如以下示例所示:CREATE TABLE #temp1 ( c1 int, c2 varchar(30) COLLATE database_default )