SQL Server 数据库排序规则报错“由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN fid 失败”解决办法
1、问题描述
(1)业务操作时报错:
(2)调整相关表列的排序规则为Chinese_PRC_CS_AS,无法更改
消息 5074,级别 16,状态 1,第 1 行
对象'CPK_BAS_EQUIPMETKI' 依赖于 列'fid'。
消息 4922,级别 16,状态 9,第 1 行
由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN fid 失败。
2、解决步骤
(1)先删除主键
alter TABLE [dbo].[CT_BAS_EQUIPMENT] drop CONSTRAINT [CPK_BAS_EQUIPMETKI] ;
(2)再改排序:
alter table [dbo].[CT_BAS_EQUIPMENT] alter column fid varchar(44) COLLATE Chinese_PRC_CS_AS not null;
(3)再创建主键
(4)检查列排序是否改成功
3、注意
(1)对主键列排序调整,要在后后面加上not null,否则列会变为null;
(2)把Chinese_PRC_CI_AS改为Chinese_PRC_CS_AS获取语句:
select ' ALTER TABLE '+sys.tables.name+' ALTER COLUMN '+sys.columns.name+' ' + sys.types.name + '('+ cast(sys.columns.max_length as varchar)+')' +' COLLATE'+' Chinese_PRC_CS_AS' +';' ,sys.tables.name as tablename,sys.columns.name as 字段名, sys.types.name as 字段类型, sys.columns.max_length as 长度, sys.columns.collation_name,sys.columns.is_nullable as 是否可空 from sys.columns, sys.tables, sys.types where sys.columns.object_id = sys.tables.object_id and sys.columns.system_type_id=sys.types.system_type_id and sys.columns.collation_name='Chinese_PRC_CI_AS' and sys.tables.name in('表名')