更改SQL Server 2008 R2数据库排序规则

时间:2014-08-12 07:19:50

标签: sql sql-server-2008-r2

我创建了一个数据库,但我忘了设置其排序规则。所以我的所有字符都像????一样。默认值为SQL_Latin1_General_CP1_CI_AS,我想将其更改为Persian_100_CI_AS

我使用了这个SQL语句:

USE master;
GO

ALTER DATABASE land_gis
COLLATE Persian_100_CI_AS ;
GO

但我得到了error

Msg 5030, Level 16, State 2, Line 1  
The database could not be exclusively locked to perform the operation.

Msg 5072, Level 16, State 1, Line 1  
ALTER DATABASE failed. The default collation of database 'land_gis' cannot be 
 set to Persian_100_CI_AS.

我不能drop并重建数据库。有没有办法改变它?

非常感谢

顺便说一下,我使用 SQL Server 2008 R2

2 个答案:

答案 0 :(得分:3)

好像您的数据库正在使用中 - 如果您自信您不会受到任何伤害 - 您可以使用此代码获取独占访问权限:

USE master;
GO

ALTER DATABASE land_gis
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO 

ALTER DATABASE land_gis
COLLATE Persian_100_CI_AS ;
GO 

然后您的ALTER DATABASE COLLATE电话应该有效。

警告:SET SINGLE_USER WITH ROLLBACK IMMEDIATE调用会断开任何可能连接到该数据库但没有警告的人,而无法保存数据! 小心使用!,特别是在生产环境中!!

答案 1 :(得分:0)

您可以使用sp_lock然后找到与相关数据库相关联的spid并将其杀死(但首先您可以查看它们背后运行的是什么

DBCC inputbuffer(spid))


USE master;
GO

ALTER DATABASE land_gis
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO 

ALTER DATABASE land_gis
COLLATE Persian_100_CI_AS ;
GO