MS SQL排序规则总结(二)

2014-11-24 16:57:28 · 作者: · 浏览: 2
SQLSERVER /SQLSYSADMINACCOUNTS=sa /SAPWD=123456 /SQLCOLLATION=SQL_Latin1_General_CP1_CI_AS
Microsoft (R) SQL Server 2008
The following error occurred:
指定的 sa 密码不满足强密码要求。有关强密码要求的更多信息,请参见安装程序帮助或 SQL Server 2008 联机丛书中的“数据库引擎配置 - 帐户设置”。
Error result: -2068578304
Result facility code: 1204
Result error code: 0
Please review the summary.txt log for further details

这个需要你修改sa的密码,满足强密码要求就可解决这个问题。
例2: 不小心将/SAPWD中间多了几个空格,结果报如下错误。


例3:附加数据库时,没有用sa账号,而是用sa创建的 windows 身份登录验证账号附加数据库,结果报如下错误,改用sa账号附加,问题解决


另外以前也碰到过两个异常情况,一下子很难重现,以后遇到在补上。


另外执行上面脚本时,有可能时间比较长,此时你有没啥提示,这时千万不要惊慌,耐心等待,如果你想了解进度,可以通过查看相关日志文件来查看进度,日志信息一般位于C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\ 下,例如C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\20130909_233902

修改数据库排序规则
更改数据库排序规则时,需要更改下列内容:
数据库的默认排序规则,这一新的默认排序规则将应用于数据库中后续创建的所有列、用户定义的数据类型、变量和参数。根据数据库中定义的对象解析 SQL 语句中指定的对象标识符时,也使用新的默认排序规则。
将系统表中的任何 char、varchar、text、nchar、nvarchar 或 ntext 列更改为使用新的排序规则。
将存储过程和用户定义函数的所有现有 char、varchar、text、nchar、nvarchar 或 ntext 参数和标量返回值更改为使用新的排序规则。
将 char、varchar、text、nchar、nvarchar 或 ntext 系统数据类型和基于这些系统数据类型的所有用户定义的数据类型更改为使用新的默认排序规则。
方法1:
ALTER DATABASE DataBaseName COLLATE Chinese_PRC_CI_AS
此时虽然修改了数据库的排序规则,但是先前用户创建的表的排序规则不会改变,仍然是旧的排序规则,你可以用下面SQL脚本验证。
SELECT c.object_id, c.name, t.name, c.collation_name
FROM sys.columns c
LEFT JOIN sys.types t on t.system_type_id = c.system_type_id
WHERE object_id=OBJECT_ID('TableName');

有时候如果有其它会话连接到数据库,你修改数据库排序规则的时候,会报5030错,如下所示:
ALTER DATABASE MESDB COLLATE Chinese_PRC_CI_AS
消息 5030,级别 16,状态 2,第 1 行
The database could not be exclusively locked to perform the operation.
消息 5072,级别 16,状态 1,第 1 行
ALTER DATABASE failed. The default collation of database 'MESDB' cannot be set to Chinese_PRC_CI_AS.
Msg 468, Level 16, State 9, Procedure FN_GET_GO_PRE_CUT_DETAIL, Line 69
Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "Chinese_PRC_90_CI_AS" in the equal to operation.

此时你必须断开其它会话,通常用下面步骤实现:
修改为单用户模式
ALTER DATABASE DataBaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
修改数据库排序规则
ALTER DATABASE MESDB COLLATE Chinese_PRC_CI_AS
修改为多用户模式
ALTER DATABASE DataBaseName SET MULTI_USER
方法2:导出创建数据库各类对象的脚本,然后替换相应的排序规则,这种方法适合丢弃数据,只保留结构的方式,如果还要考虑数据,那么是个复杂、繁琐的实现方法。

修改列排序规则

ALTER TABLE TEST2 ALTER COLUMN NAME CHAR(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL

排序规则冲突
1:SQL 脚本使用临时表时,出现下面错误(服务器排序规则与数据库排序规则不一致)。
Cannot resolve the collation conflict between "Chinese_PRC_90_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.
一般出现这种情况,通常通过显示指定临时表相关列的排序规则或在SQL 脚本里面显示指定排序规则解决。
2:两台服务器上的数据库通过链接服务器交换操作(或交换数据)时,由于排序规则,有可能导致查询语句超级慢,出现这个情况,是由于转换时,导致查询计划不走索引,走全表扫描所致。