SQL Server的排序规则在啥时候能够进行设置或修改?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server的排序规则在啥时候能够进行设置或修改?相关的知识,希望对你有一定的参考价值。

SQL
Server的默认排序规则只能在安装SQL
Server的时候才能修改,如果只是修改一个库,除了楼上给出的代码修改外,还可以自己手动修改,右键单击你需要修改的数据库,选择属性,在弹出的对话框中选择选项,选项对话框中有个排序规则的下拉框。一般都是选择的Chinese_PRC_CI_AS
参考技术A 更改排序规则。
alter
database
数据库
collate
排序规格
其中,某些排序规则指定CI
不区分大小写,CS
指定区分大小写。
如:alter
database
数据库
COLLATE
Chinese_PRC_CI_AS
不区分大小写,而
alter
database
数据库
COLLATE
Chinese_PRC_CS_AS
使之区分大小写。
使用如下命令,可以获得更多的规则:
SELECT
*
FROM
::fn_helpcollations()
在sql
server2000中如何改变整个sql的
排序规则名称
重建
master
数据库
关闭
Microsoft®
SQL
Server™
2000,然后运行
Rebuildm.exe。该程序位于
Program
Files\Microsoft
SQL
Server\80\Tools\Binn
目录中。
在"重建
Master"对话框中单击"浏览"按钮。
在"浏览文件夹"对话框中,选择
SQL
Server
2000
光盘上或用于安装
SQL
Server
2000
的共享网络目录中的
\Data
文件夹,然后单击"确定"按钮。
单击"设置"按钮。在"排序规则设置"对话框中,验证或更改用于
Master
数据库或其它数据库的设置。
最初,显示的是默认排序规则设置,但这些设置有可能与安装期间选择的排序规则不匹配。可以选择与安装期间使用的排序规则相同的设置,也可以选择新的排序规则设置。完成后单击"确定"按钮。
在"重建
Master"对话框中单击"重建"按钮以启动进程。
重建
Master
实用工具重新安装
master
数据库。
说明
若要继续,则可能需要终止正在运行的服务器。本回答被提问者采纳

SQL Server:尽管进行了转换,但无法解决排序规则冲突

【中文标题】SQL Server:尽管进行了转换,但无法解决排序规则冲突【英文标题】:SQL Server: Cannot resolve the collation conflict, despite conversion 【发布时间】:2017-03-22 13:51:53 【问题描述】:

我仍然得到错误代码

无法解决“Latin1_General_CI_AS”之间的排序规则冲突 和“SQL_Latin1_General_CP1_CI_AS”中的等于操作。

尽管我使用的是根据these 两个answers 的转换。这是我的代码:

-- ...
from #TmpResult a
left join #GroupMemberTable b
on (a.DBO_Owner_Login COLLATE SQL_Latin1_General_CP1_CI_AS) = (b.login_name COLLATE SQL_Latin1_General_CP1_CI_AS)

我已将它们都转换为:SQL_Latin1_General_CP1_CI_AS

谢谢

更新: 以下是全文摘录:

create table #TmpTableSec3 (database_name varchar(100), Database_Owner varchar(200), DBO_Owner_Login varchar(200), type varchar (100), privilege varchar(100), group_name varchar(500))
insert into #TmpTableSec3
select a.database_name, a.principal, a.DBO_Owner_Login, b.type, b.privilege, b.group_name
from #TmpResult a
left join #GroupMemberTable b
on (a.DBO_Owner_Login COLLATE SQL_Latin1_General_CP1_CI_AS) = (b.login_name COLLATE SQL_Latin1_General_CP1_CI_AS)
    --a.DBO_Owner_Login = b.login_name
    --fieldname COLLATE DATABASE_DEFAULT = otherfieldname COLLATE DATABASE_DEFAULT
where b.group_name is not null --and b.privilege = 'admin'
order by a.database_name

然后该表由以下内容填充:

insert into #TmpResult
select a.database_name, a.Owner, b.DBO_Owner_Login from #TmpTableSec1 a
join #TmpTableSec2 b
on a.database_name = b.database_name


  set @cmd = 'select name,  suser_sname(owner_sid) from master.sys.databases where name = '''+@name+''''
  --select @cmd
  insert #TmpTableSec1 exec (@cmd)
  --select @dbowner = (select suser_sname(owner_sid) from master.sys.databases where name = @name)
  set @cmd = 'use '+ @name +'
  select db_name(), name, suser_sname(sid)
  from sys.database_principals where name = ''dbo'''
  --select ''@DBO'' = (select suser_sname(sid) from sys.database_principals where name = ''dbo'') '
  INSERT #TmpTableSec2 exec (@cmd) 

【问题讨论】:

问题可能出在代码的..... 部分 请发布您尝试执行的整个代码 @NickyvV 我发了更多,但我认为问题只与那一行有关 您正在向表中插入数据,错误很可能是某些列的排序规则定义与您插入的不同。如果问题出在a.DBO_Owner_Login,您可能还想在SELECT 中使用a.DBO_Owner_Login COLLATE SQL_Latin1_General_CP1_CI_AS(或适当的排序规则) 偶然是原始表格中存储为文本的字段之一? 【参考方案1】:
drop table #test
drop table #test2

create table #test
(id int, name varchar(100) collate Latin1_General_CI_AI
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED ([id] ASC)
)

create table #test2
(id int, name varchar(100) collate SQL_Latin1_General_CP1_CI_AS
CONSTRAINT [PK_test2] PRIMARY KEY CLUSTERED ([id] ASC)
)

insert into #test values (1, 'premonition')
insert into #test values (2, 'premònition')
insert into #test values (3, 'lowmotion')

insert into #test2 values (1, 'premonition')
insert into #test2 values (2, 'premònition')
insert into #test2 values (3, 'lowmotion')

select * 
from #test 
inner join #test2 
    on #test.name = #test2.name collate SQL_Latin1_General_CP1_CI_AS

collate SQL_Latin1_General_CP1_CI_AS 强制与此排序规则进行比较,我使用的是 #test2.name 中定义的相同排序规则

也许这篇“排序优先”文章可以帮助您。

https://msdn.microsoft.com/en-us/library/ms179886.aspx

【讨论】:

以上是关于SQL Server的排序规则在啥时候能够进行设置或修改?的主要内容,如果未能解决你的问题,请参考以下文章

审计 SQL Server - 谁在啥时候改变啥? SOX 合规性

SQL Server:尽管进行了转换,但无法解决排序规则冲突

SQL Server 中索引的排序规则

SQL Server 为 SQL Server 2008 R2 的英文版,如何将 master 数据库的排序规则改为Chinese_PRC_CL_AS

SQL server中如何更改排序规则

sqlserver支持的字符集都有哪些