我们正在使用带有“SQL_Latin1_General_CP1_CI_AS”的全新 SQL Server 2017 CU23 标准版数据库。现在,我想将所有系统数据库(master、model、temp、msdb)更改为另一个排序规则。如何在不安装 SQL Server 的情况下更改它?
谢谢,
我们正在使用带有“SQL_Latin1_General_CP1_CI_AS”的全新 SQL Server 2017 CU23 标准版数据库。现在,我想将所有系统数据库(master、model、temp、msdb)更改为另一个排序规则。如何在不安装 SQL Server 的情况下更改它?
谢谢,
在不重新安装的情况下更改实例本身(实例级和系统 DB加上用户数据库)的排序规则的唯一方法是未记录的命令/选项。其他答案中提到的“重建系统数据库”选项实际上是重新安装,即使它不是字面意义上的,这种方法也不会更新任何用户数据库以匹配新的排序规则。
我在此处发布了对这种未记录方法的详细分析,以及对实例和/或数据库进行任何排序规则更改的含义:
更改所有用户数据库中的实例、数据库和所有列的排序规则:可能出了什么问题?
有相当多的领域可能会受到影响,这在很大程度上取决于您是在谈论一个特定的数据库,还是在谈论该实例和该实例上的一个或多个数据库,以及您是否有任何
VARCHAR
数据包含带有值的字符128 - 255,并且如果您正在切换敏感性(例如区分大小写到区分大小写,反之亦然)。关于
ALTER DATABASE ... COLLATE ...
选项:sys.objects
,,sys.schemas
等);它不会更改任何用户表(列或索引)用于设置或更改数据库排序规则的 Microsoft 联机丛书解释了如何执行此操作,特别是如何在使用 SQL Server Management Studio部分中的SSMS中。或者,您也可以像这样编写脚本:
如果这些选项都不适用于系统数据库,那么在不运行安装程序或重建系统数据库的情况下就不可能这样做。
无论哪种方式,我都建议您谨慎更改系统数据库的排序规则,因为如果操作不当,您可能会遇到许多问题。例如,需要与不区分大小写的上下文交互的区分大小写的排序规则可能会发生冲突并产生错误。此外,使用该函数在两个不同的整理上下文之间进行比较可能会导致基数估计问题。
COLLATE
另外,请注意,如果您将
model
数据库设置为与服务器的排序规则不同的排序规则,那么所有新创建的数据库将采用与数据库相同的排序规则model
并忽略服务器的排序规则。您可以使用 setup rebuild database 操作更改实例和系统数据库排序规则。这将使用指定的排序规则重新创建系统数据库,而无需重新安装二进制文件。重建后的系统数据库基本上是全新安装,因此对系统对象(登录名、作业等)的任何更改都将丢失。