自动清理 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;