【问题标题】:SQL Server - is there a way to mass resolve collation conflictsSQL Server - 有没有办法批量解决排序规则冲突
【发布时间】:2011-03-11 04:19:34
【问题描述】:

我们的开发和生产 SQL Server 之间的数据库、表和某些列的排序规则不同,这对开发造成了严重破坏。事情将在 dev 上运行,然后在提升时由于排序规则冲突而中断,数据和结构将从 prod 复制到 dev,这反过来又由于冲突等而中断 dev 上的查询。我们将通过显式定义来解决它有时查询中的 COLLATION 选项或设置违规表中每一列的排序规则来解决它。前者似乎对性能有影响,后者是 PITA。

是否有任何脚本或任何东西可以显示排序差异或关于数据库和对象的信息,或者关于自动协调差异以便我们可以同步的方法的任何建议?

此外,在查询中调试排序规则冲突的任何提示也会很好....我永远不知道冲突实际在哪里,最终不得不逐行遍历并覆盖它....叹息。 ...一团糟。

感谢您的任何想法!

【问题讨论】:

  • 我为可配置系统编程,但无权更改数据库模式。我想要一段可以在 SQL 脚本中使用的代码来覆盖整个脚本的排序规则,这样就永远不会有任何冲突。

标签: sql sql-server collation


【解决方案1】:

一般来说,在临时表、表变量等上使用“COLLATE DATABASE_DEFAULT”

排序规则冲突通常发生在服务器与数据库的排序规则冲突中,在这种情况下服务器是 tempdb。

坦率地说,我会努力调整您的排序规则,并让每个数据库都有一个。

如果您在服务器、数据库和列之间进行混合搭配,那么就没有灵丹妙药了。您可以首先在代码中查找所有 COLLATE 子句(见上文),然后确保所有列都已删除排序规则......

【讨论】:

  • 谢谢,我实际上不是这些服务器的管理员,出于某种原因,DBA 没有将开发服务器和产品服务器上的表之间的排序规则同步为相同:-/ 我将使用在大多数情况下,COLLATE DATBASE_DEFAULT 可以绕过它,但最好完全不必这样做,以使架构相同。
【解决方案2】:

您的第一步可能是确定您应该使用哪种排序规则的标准。如果由于您的应用程序的国际要求而要支持多个归类,那么请决定您将支持哪些以及您计划如何测试所有归类。

这里的第一步是从操作上决定您将要做什么,而不是技术解决方案。完成此操作后,您将不得不硬着头皮检查所有表、存储过程等,并在所有服务器和您拥有的任何源代码中同步所有这些在您的源代码控制系统中。理想情况下,您的查询无需参考任何排序规则或进行任何转换即可正常工作。

为了帮助您找到所有排序规则问题,您可以开始在所有数据库中查看:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS

【讨论】:

    【解决方案3】:

    我使用这个工具取得了巨大的成功 http://www.codeproject.com/KB/database/ChangeCollation.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-04
      • 2021-04-13
      • 2010-10-07
      • 2012-01-21
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2010-12-03
      相关资源
      最近更新 更多