• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

急:请高人指点去掉 COLLATE Chinese_PRC_CI_AS 排序规则的办法

unm 2005-11-03 09:41:17
在生成表时,默认生产语句会带有COLLATE Chinese_PRC_CI_AS,导致某些时候会出现问题,特别是操作系统不同的时候,现在碰到的问题是,表已经产生,如何去掉这些排序规则呢?
使得:
CREATE TABLE tmp1 (
[LastAction] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
变成与
CREATE TABLE tmp2 (
[LastAction] [nvarchar] (50) NOT NULL
) ON [PRIMARY]
GO
同样的效果呢?
...全文
1343 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
QQMagicer 2005-11-04
--请看如下文件,批量修改排序规则,是没法实现的

更改排序规则
可使用 ALTER TABLE 语句更改列的排序规则:

CREATE TABLE MyTable
(PrimaryKey int PRIMARY KEY,
CharCol varchar(10) COLLATE French_CI_AS NOT NULL
)
GO
ALTER TABLE MyTable ALTER COLUMN CharCol
varchar(10)COLLATE Latin1_General_CI_AS NOT NULL
GO

不能更改正由以下对象引用的列的排序规则:

计算列。


索引。


自动生成或由 CREATE STATISTICS 语句生成的分发统计。


CHECK 约束。


FOREIGN KEY 约束。
还可在 ALTER DATABASE 上使用 COLLATE 子句来更改数据库的默认排序规则:

ALTER DATABASE MyDatabase COLLATE French_CI_AS

更改数据库的默认排序规则不会更改任何现有用户定义表中的列排序规则。可使用 ALTER TABLE 更改列的排序规则。在 ALTER DATABASE 语句上使用 COLLATE CLAUSE 可以:

更改数据库的默认排序规则。新的默认排序规则适用于随后创建在数据库中的所有列、用户定义数据类型、变量和参数。在数据库中定义的对象上解析 SQL 语句中指定的对象标识符时,也使用新的默认排序规则。


将系统表中的任何 char、varchar、text、nchar、nvarchar 或 ntext 列更改为使用新的排序规则。


将存储过程和用户定义函数的所有现有的 char、varchar、text、nchar、nvarchar 或 ntext 参数和标量返回值更改为使用新的排序规则。


将 char、varchar、text、nchar、nvarchar 或 ntext 系统数据类型,以及基于这些系统数据类型的所有用户定义数据类型更改为使用新的默认排序规则。
为列或数据库以外的任何其它对象指派了排序规则后,将不能更改排序规则,除非除去并重新创建对象。这一操作将十分复杂。若要更改 Microsoft® SQL Server™ 2000 实例的默认排序规则,必须:

确保具有重新创建用户数据库及数据库中的所有对象所需的全部信息或脚本。


使用工具(如大容量复制)导出所有数据。


除去所有用户数据库。


重建 master 数据库并指定新的排序规则。


创建所有数据库及数据库中的所有对象。


导入所有数据。


说明 也可以不更改 SQL Server 2000 实例的默认排序规则,而为创建的每个新数据库指定默认排序规则。

回复
unm 2005-11-03
默认的
CREATE TABLE tmp2 (
[LastAction] [nvarchar] (50) NOT NULL
) ON [PRIMARY]
是什么排序规则呢?
现在是这样的情况:服务器是繁体的系统,每次创建表的时候,我都 把COLLATE Chinese_PRC_CI_AS 去掉的,但是另一个库没有去掉,现在也已经有一些数据了,现在怎么最快捷的方式改变成无COLLATE Chinese_PRC_CI_AS 的状态呢? 现在存入数据有乱码

请问:wgsasd311(自强不息) ,有什么办法可以解决我现在这种情况呢?
回复
wgsasd311 2005-11-03
--表有两种排序(SQL和WINDOWS),你的问题只要修改WINDOWS默认排序(在区域设置里有)
选择 SQL 排序规则
使用"排序规则设置"屏幕修改默认的排序规则设置。使用"Windows 区域设置"选项匹配 Microsoft® SQL Server® 2000 实例中的排序规则设置。使用"SQL 排序规则"匹配与 SQL Server 早期版本中的排序次序相兼容的设置。

Windows 区域设置
仅当 SQL Server 的安装必须与 SQL Server 2000 另一实例使用的排序规则设置匹配或必须与另一计算机的 Windows 区域设置匹配时,才需更改"Windows 区域设置"(Windows 排序规则)的默认设置。

排序规则指示器
请从列表中选择特定的 Windows 排序规则的名称,例如:

对于美国英语字符集使用 Latin1_General(代码页 1252)。


对于西班牙语的所有变体(也使用与美国英语字符集相同的字符集)使用 Modern_Spanish(代码页 1252)。


对于阿拉伯语的所有变体(使用阿拉伯语字符集)使用 Arabic(代码页 1256)。


对于日语的 Unicode 版本使用 Japanese_Unicode(代码页 932)。此版本具有与 Japanese 不同的排序次序,但二者的代码页同为 932。
有关更多信息,请参见 Windows 排序规则名称。

排序次序
选择用于选定的排序规则指示器的"排序次序"选项。二进制是最快的排序次序且区分大小写。如果选择了"二进制",则"区分大小写"、"区分重音"、"区分假名"和"区分宽度"选项不可用。有关更多信息,请参见 Windows 排序规则排序样式。

SQL 排序规则
"SQL 排序规则"选项用于与 Microsoft SQL Server 的早期版本兼容。选择该选项以便与 SQL Server 7.0 版、SQL Server 6.5 版或更早版本兼容的设置匹配。有关更多信息,请参见 SQL 排序规则。

回复
NinGoo 2005-11-03
使用powerdesigner之类的工具逆向工程来生成表的创建脚本
回复
Andy__Huang 2005-11-03
如果更改表名

sp_rename 'tmp1','tmp2'

回复
Andy__Huang 2005-11-03
alter table tmp1 alter column lastaction nvarchar(50) not null
回复
unm 2005-11-03
再请教一下高人,这个库里好多表的字段都是的,如何一次性搞定?
回复
wgsasd311 2005-11-03
--try
alter table temp1 lastaction alter column lastaction nvarchar(50) not null
回复
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2005-11-03 09:41
社区公告
暂无公告