面临的挑战是将AdventureWorks
数据库的排序规则从Latin1_General_CS_AS
更改为SQL_Latin1_General_CP1_CI_AS
。有谁知道怎么做?
我试过了:
alter database AdventureWorks set single_user
alter database AdventureWorks collate SQL_Latin1_General_CP1_CI_AS
alter database AdventureWorks set multi_user
但我收到了以下错误:
Msg 5075,Level 16,State 1,Line 3
对象'ufnLeadingZeros'依赖于数据库排序规则。该 数据库排序规则无法更改 如果架构绑定对象依赖于 它。删除依赖项 数据库整理然后重试 操作。Msg 5075,Level 16,State 1,Line 3
对象'CK_ProductReview_Rating'是依赖的 关于数据库整理。数据库 如果a,校对不能改变 架构绑定对象依赖于它。 删除依赖项 数据库整理然后重试 操作Msg 5075,Level 16,State 1,Line 3
对象'CK_TransactionHistory_TransactionType' 依赖于数据库整理。 数据库整理不可能 如果是模式绑定对象,则更改 取决于它。删除依赖项 在数据库整理然后 重试该操作。Msg 5075,Level 16,State 1,Line 3
对象'CK_ProductVendor_AverageLeadTime'是 依赖于数据库整理。该 数据库排序规则无法更改 如果架构绑定对象依赖于 它。删除依赖项 数据库整理然后重试 操作
然后我尝试这样的事情:
DECLARE @NewCollation VARCHAR(255), @DBName sysname
SELECT @NewCollation = 'SQL_Latin1_General_CP1_CI_AS', -- change this to the collation that you need
@DBName = DB_NAME()
DECLARE @CName varchar(255),
@TbleName sysname,
@objOwner sysname,
@Sql varchar(8000),
@Size int,
@Status tinyint,
@Colorder int
Declare CurWhileLoop cursor read_only forward_only local
for Select
QUOTENAME(C.Name)
,T.Name
,QUOTENAME(U.Name) + '.' +QUOTENAME(O.Name)
,C.Prec
,C.isnullable
,C.colorder
From syscolumns C
inner join systypes T on C.xtype=T.xtype
inner join sysobjects O on C.ID=O.ID
inner join sysusers u on O.uid = u.uid
where T.Name in ('varchar', 'char', 'text', 'nchar', 'nvarchar', 'ntext')
and O.xtype in ('U')
and C.collation != @NewCollation
and objectProperty(O.ID, 'ismsshipped')=0
order by 3, 1
open CurWhileLoop
SET XACT_ABORT ON
begin tran
fetch CurWhileLoop into @CName, @TbleName, @objOwner, @Size, @Status, @Colorder
while @@FETCH_STATUS =0
begin
set @Sql='ALTER TABLE '+@objOwner+' ALTER COLUMN '+@CName+' '+@TbleName+ isnull ('('
+convert(varchar,@Size)+')', '') +' COLLATE '+ @NewCollation
+' '+case when @Status=1 then 'NULL' else 'NOT NULL' end
exec(@Sql) -- change this to print if you need only the script, not the action
fetch CurWhileLoop into @CName, @TbleName, @objOwner, @Size, @Status, @Colorder
end
close CurWhileLoop
deallocate CurWhileLoop
commit tran
我得到了以下错误:
Msg 4104,Level 16,State 1,Line 10
无法绑定多部分标识符“U.Name”。
我试图针对AdventureWorks
数据库运行最后一个查询,并且我得到了如上所述的U.Name名称错误,当我尝试对master数据库运行此查询时没有任何反应。
请帮忙!
答案 0 :(得分:2)
建议从头开始。与上述方法相比,您将花费更少的精力。
下载new copy / scripts for SQL Server 2005 AdventureWorks。
确保您的服务器默认具有所需的排序规则。右键单击 - 属性 - >常规 - >服务器整理。
使用SQL Server Management Studio创建数据库时,可以明确选择排序规则。