我们的开发人员和生产SQL Server之间存在数据库,表和某些列的排序规则不同的情况,并且会对开发造成严重破坏。事情将在dev上运行,然后由于排序冲突在提升时中断,数据和结构将从prod复制到dev,这反过来因为冲突等而破坏dev上的查询。我们将通过明确定义有时候查询中的COLLATION选项或者在违规表中设置每列的排序规则来解决它。前者似乎有性能损失,后者是PITA。
是否有任何脚本或任何可以显示数据库和对象的排序规则差异或信息的内容,或有关自动协调差异的方法的任何建议,以便我们可以使事情保持同步?
此外,在查询中调试校对冲突的任何提示都会很好....我从来不知道冲突实际上在哪里,最终必须逐行检查并覆盖它....叹息。 ......这太乱了。
感谢您的任何想法!
答案 0 :(得分:4)
通常,在临时表,表变量等上使用“COLLATE DATABASE_DEFAULT”
整理冲突通常发生在服务器与数据库排序规则冲突之间,服务器在这种情况下是tempdb。
坦率地说,我会努力调整您的排序规则,并为每个数据库设置一个排序规则。
如果您在服务器,数据库和列之间混合搭配,那么就没有灵丹妙药。您可以首先查找代码中的所有COLLATE子句(参见上文),然后确保所有列都已删除排序规则....
答案 1 :(得分:0)
您的第一步可能是决定您应该使用的排序规则。如果由于您的应用程序的国际要求,您将支持多个排序规则,那么请确定您将支持哪些排序规则以及您计划如何测试所有排序规则。
这里的第一步是在操作上决定你将要做什么,而不是技术解决方案。完成后,您将不得不咬紧牙关并浏览所有表格,存储过程等,并在所有服务器和任何源代码中同步所有这些服务器在您的源控制系统中。理想情况下,您的查询可以在不参考任何排序规则或进行任何转换的情况下进行工作。
为了帮助您找到所有排序规则问题,您可以在所有数据库中开始查看:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
答案 2 :(得分:0)