更改数据库的排序规则!

moqiyayan 2004-04-30 07:37:24
怎么样修改数据库的排序规则?
是这样写:
alter database 数据库名 collate Chinese_PRC_CS_AS ?
为什么报错呢?报错如下:
未能排它地锁定数据库以执行该操作。
ALTER DATABASE 失败。无法将数据库 '' 的默认排序规则设置为 'Chinese_PRC_CI_AS'。

还有更改数据库的排序规则会不会对数据库中的数据信息造成影响。

谢谢高手赐教!
...全文
2146 19 点赞 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zjcxc 元老 2004-06-09
ordrby 排序

<,>的比较
  • 打赏
  • 举报
回复
moqiyayan 2004-06-09
这个帖子曾经我已经结了。
不过我又有关于排序规则我还是有些不明白的地方,所以就还在这张帖子上提出了:
如上:
对数据作那些操作会受数据库排序规则的影响?

谢谢高手指教,谢谢!
  • 打赏
  • 举报
回复
moqiyayan 2004-06-09
对数据作什么操作会受数据库排序规则的影响?
  • 打赏
  • 举报
回复
uuxiaoli 2004-05-13
to zjcxc(邹建)
帮忙看一下,选择"在两个SQL数据库之间复制数据和对象",字符集还是没变,导过去的数据还是乱码,但选择"从源数据库复制表和视图"的方式导就正常,奇怪
  • 打赏
  • 举报
回复
zjcxc 元老 2004-05-13
是否字段类型的问题? 字段是unicode型的吗?
  • 打赏
  • 举报
回复
健者天行 2004-05-04

13.修改数据库的排序规则:
select distinct collationid from dbo.syscolumns
select * from dbo.syscolumns where collationid=53251 --Chinese_Taiwan_Stroke_CI_AS
select * from dbo.syscolumns where collationid=53284 --Chinese_PRC_CI_AS

EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE

update dbo.syscolumns set collationid=53284 where collationid=53251

EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
go
  • 打赏
  • 举报
回复
Frewin 2004-05-04
up
  • 打赏
  • 举报
回复
zjcxc 元老 2004-05-02
那你试试用数据库导入/导出向导.

sql200企业管理器
--右键要你的数据库
--所有任务
--导出数据
--目标数据库,数据库选择<新建>,新建一个空库(或者事先建好库,特别注意排序规则)
--然后选择"在两个SQL数据库之间复制数据和对象"
--将"使用排序规则"的选择取消,其他根据你的需要选择
--最后完成.
  • 打赏
  • 举报
回复
moqiyayan 2004-05-01
更改数据库的排序规则会不会对数据库中的数据信息造成影响?
或是给其他读取此数据库信息的程序造成混乱?
  • 打赏
  • 举报
回复
moqiyayan 2004-05-01
可是我得数据库中有六七百个表,而每个表中都有几个主键,要一个一个的改?
是不是有点太麻烦了?
再有没有更好的解决办法了?
  • 打赏
  • 举报
回复
seekmoon 2004-04-30
xuexi
  • 打赏
  • 举报
回复
zjcxc 元老 2004-04-30
当然可以啦.
  • 打赏
  • 举报
回复
internetcsdn 2004-04-30
删除之后再新建行不行啊?
  • 打赏
  • 举报
回复
zjcxc 元老 2004-04-30
对于不能修改的字段,要手工修改.
  • 打赏
  • 举报
回复
zjcxc 元老 2004-04-30
--用这个,不过,主键字段不能修改

declare tb cursor for
SELECT sql='alter table ['+d.name
+'] alter column ['+a.name+'] '+b.name
+ '('+cast(a.length*2 as varchar)+')'
+' collate Chinese_PRC_CS_AS'
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where
b.name like '%char'
and
not exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) --主键不能修改
order by d.name,a.name

declare @sql varchar(1000)
open tb
fetch next from tb into @sql
while @@fetch_status = 0
begin
exec(@sql)
fetch next from tb into @sql
end
close tb
deallocate tb
  • 打赏
  • 举报
回复
moqiyayan 2004-04-30
zheninchangjiang(我爱燕子)、zjcxc(邹建)
谢谢回复。
两种方法我都试过了,数据库的排序规则是改过来了,
但是数据库中所有表中字符类型的排序规则又由开始的<database default>变成了Compatibility_198_804_30001,这该怎么改呢?
  • 打赏
  • 举报
回复
zjcxc 元老 2004-04-30
--如果上述方法无效,改用:

/*
断开所有用户打开的连接
*/
use master
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GO

create proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @sql nvarchar(500)
declare @spid nvarchar(20)

declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go

--用法
exec p_killspid '数据库名'
go

alter database 数据库名 collate Chinese_PRC_CS_AS

  • 打赏
  • 举报
回复
zjcxc 元老 2004-04-30
use master
go

alter database 数据库名 collate Chinese_PRC_CS_AS
  • 打赏
  • 举报
回复
zheninchangjiang 2004-04-30
sp_dboption 'dbname','single user','true'
再进行修改
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-04-30 07:37
社区公告
暂无公告