首页 文章

将SQL Server排序规则更改为区分大小写不区分大小写?

提问于
浏览
31

我最近安装了SQL Server 2008,并选择了排序规则作为区分大小写 . 我想让它对整个实例不区分大小写(不适用于该实例中的数据库) . 如果我更改了排序规则,它是否会影响任何现有数据库?如果真是这样,那么是以哪种方式?

2 回答

  • 56

    您基本上需要再次运行安装以使用新的排序规则重建 master 数据库 . 您无法以任何其他方式更改整个服务器的排序规则 .

    看到:

    Update: 如果要更改数据库的排序规则,可以使用此T-SQL片段获取当前排序规则:

    SELECT name, collation_name 
    FROM sys.databases
    WHERE name = 'test2'   -- put your database name here
    

    这将产生如下值:

    Latin1_General_CI_AS
    

    _CI 表示"case insensitive" - 如果您想要区分大小写,请在其位置使用 _CS

    Latin1_General_CS_AS
    

    所以你的T-SQL命令是:

    ALTER DATABASE test2 -- put your database name here
       COLLATE Latin1_General_CS_AS   -- replace with whatever collation you need
    

    您可以使用以下命令获取服务器上所有可用排序规则的列表:

    SELECT * FROM ::fn_helpcollations()
    

    您可以使用以下命令查看 server's 当前排序规则:

    SELECT SERVERPROPERTY ('Collation')
    
  • 2

    您可以这样做,但更改将影响插入数据库的新数据 . 从长远来看,按照上面的建议进行操作 .

    还有一些技巧可以覆盖排序规则,例如存储过程或函数的参数,别名数据类型,并为变量分配数据库的默认排序规则 . 要更改别名类型的排序规则,必须删除别名并重新创建它 .

    您可以使用COLLATE子句覆盖文字字符串的默认排序规则 . 如果未指定排序规则,则会为文字指定数据库默认排序规则 . 您可以使用DATABASEPROPERTYEX查找数据库的当前排序规则 .

    您可以通过在SELECT语句的ORDER BY子句中指定排序规则来覆盖服务器,数据库或列排序规则 .

相关问题