我创建了一个数据库,但我忘了设置其排序规则。所以我的所有字符都像????
一样。默认值为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 。
答案 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