当前位置:  数据库>sqlserver

自动清理 MS SQL Server Table Collation 的问题

    来源: 互联网  发布时间:2014-08-29

    本文导语:  在一个团队项目中,没有约定好Collation, 在 MS SQL Server中编程就会遇到这样的问题: Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation. 因为编码问题,不同编码的字符串并不能直...

在一个团队项目中,没有约定好Collation, 在 MS SQL Server中编程就会遇到这样的问题:
Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

因为编码问题,不同编码的字符串并不能直接进行比较,这种有两个解决方法,1是在 query中 指定 用某一个collation进行比较, 另外一个就是修改column的 collation type 来避免这种错误。

第二种方法,一个一个column改起来很累,写了个script,除了 被当作 constraints比如 primary key, foreign key之外的 varchar, char,nvarchar 都可以统一修改成一个collation…

完整sql代码:
 

代码如下:

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 (   
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;


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Windows清理助手最新版3.1发布及下载地址
  • ubuntu垃圾清理
  • Visual Studio 代码清理工具 CodeMaid
  • 注册表清理工具 Little Registry Cleaner
  • 系统清理工具 CCleaner
  • linux系统中,晚上会自动清理内存吗,在线等
  • 恶意程序清理软件 A-Squared
  • 磁盘使用情况统计及清理 WinDirStat
  • 磁盘文件清理工具 Disk Cleaner
  • main函数在线程执行完毕之前退出, 线程的哪些资源会被清理?
  • listener.log能不能自动清理
  • 使用ipcrm清理ipc
  • 请教 redhat清理内存的问题
  • 在linux中如何作类似磁盘清理,腾出磁盘空间的维护?谢谢!
  • 有没有谁在VMWARE下用UBUNTU的。。怎么清理空间啊
  • Windows系统清理工具 xpy
  • android资源清理工具 arc
  • 消息队列的清理问题
  • Linux下Oracle归档日志自动清理脚本代码(sh)
  • 清理日志问题
  • linux磁盘空间不足,如何清理?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3