zoukankan      html  css  js  c++  java
  • 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法

    在SQL数据库中使用SQL语句(格式:alter table [tablename] alter column [colname] [newDataType])修改某表的字段类型时,报一下错误:

    “**********************************

    对象"DF__******" 依赖于 列"column1"。 
    ***********************************
    由于一个或多个对象访问此列,ALTER TABLE ******** 失败。”

      根据上述提示在网上搜索结果,得知发生该错误的原因在于要修改的字段存在Default约束,解决方法:

    1.查找出表中该字段的约束名称(或根据已有的提示及对象"DF__******")

    declare @name varchar(50)
    select  @name =b.name from sysobjects b join syscolumns a on b.id = a.cdefault 
    where a.id = object_id("TableName") 
    and a.name ="ColumName"

    2. 删除存在的约束

    exec("alter table TableName drop constraint " + @name)

    3. 再执行修改字段类型的脚本即可

      综合查阅资料发现:将表中的字段设置为NOT NULL(不为空)、给字段增加Default值(默认值)这样的操作都会给该字段添加约束,增加了这些约束后,在用SQL脚本修改字段类型、删除字段的时候均会发生类似错误,需要查找该字段上已存在的约束,并删除存在的约束,再次执行修改/删除脚本即可。

      资料引用:

      1. 修改字段类型时出现的 依赖于 列Classinfo_ShowType,因为有一个或多个对象访问此列

      2. 由于一个或多个对象访问此列错误的解决办法

      3. SQL Server】sql语句删除表的有默认值的列

      4. Alter Table修改表结构的错误及解决方法

    修改列类型
    新增列
    --数据表[T_NoteSendInfoLog]新增[IsPCUserSend]字段
    if not exists(select 1 from [syscolumns]
             where [id] = object_id('dbo.T_NoteSendInfoLog')
             and [name] like 'Not_IsPCUserSend')
    begin
        exec('alter table [T_NoteSendInfoLog] add [Not_IsPCUserSend] int')--是否为物业公司用户发送
    
    end
    go

    =============================================

    引用自:http://www.byywee.com/page/M0/S217/217551.html

  • 相关阅读:
    注释驱动的 Spring cache 缓存介绍--转载
    AOP 的利器:ASM 3.0 介绍
    字符串比较报错
    Performing a thread dump in Linux or Windows--reference
    Linux 精准获取进程pid--转
    /bin/bash^M: bad interpreter: 没有那个文件或目录--转载
    linux 进程综合指令
    Sending e-mail with Spring MVC---reference
    Spring XD 1.1 M2 and 1.0.3 released---support kafka
    大数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看
  • 原文地址:https://www.cnblogs.com/PLifeCopyDown/p/2729400.html
Copyright © 2011-2022 走看看