读书人

自动清理 MS SQL Server Table Collat

发布时间: 2012-07-22 19:31:17 作者: rapoo

自动清理 MS SQL Server Table Collation 问题 转载

?

Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

?

?

?

declare @CollationName varchar(500);

?? set @CollationName = 'SQL_Latin1_General_CP1_CI_AS'
?
?? create table #tmp (sqlStr varchar(max));

?? insert into #tmp

?? select? 'alter table [' + o.name + '] alter column [' + c.name + ']' +

?? (case c.system_type_id when 167 then ' varchar(' when 175 then ' char(' else ' nvarchar(' end)

? + convert(varchar,c.max_length) + ') collate ' + @CollationName

? from sys.columns c,

????? sys.objects o

?? where? c.object_id=o.object_id and o.type='U' and c.system_type_id in (167,175,231) and collation_name<>@CollationName

?? and c.name not in (???

? 15:???? select???? cc.COLUMN_NAME

????? from????

????????? INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,

????????? INFORMATION_SCHEMA.KEY_COLUMN_USAGE cc

?????? where????

?????????? cc.TABLE_NAME = pk.TABLE_NAME

????????? and??? cc.CONSTRAINT_NAME = pk.CONSTRAINT_NAME)

???

?? while (exists (select * from #tmp))

?? begin

?????? declare @sqlStr varchar(max);

?????? select @sqlStr=(select top 1 sqlstr from #tmp);

?????? exec(@sqlStr)

?????? delete from #tmp where sqlStr=@sqlStr

?? end

???

?? drop table #tmp;

读书人网 >SQL Server

热点推荐