zoukankan      html  css  js  c++  java
  • Alter Table对表结构修改时,常见的错误及解决方法

    最近自已开发了一个自定义表单管理系统,就是让用户自己定制自己的表,字段,通过此系统自动生成表,并提供数据录入与修改的界面。

    我参照SQL Server帮助文档中Alter Table命令,对表结构进行修改时,出错了一些错误,下面特针对此常见错误做出详细说明,文章中有引用作者[Leo]的方法例题

    代码
    一、为标识列添加默认值 
    下面对表MyCustomers中的字段CompanyName进行修改,使其具有默认值'Datum Corporation' 
    ALTER TABLE MyCustomers ADD DEFAULT 'Datum Corporation' FOR [CompanyName]

    如果该列设置了默认值,那么对该列结构作修改操作,都将引发错误(如删除或修改该列的默认值等)
    出错信息
    如下:
    “消息 
    5074,级别 16,状态 1,第 1 行
    对象
    'DF__Tb_SalaryPar__aa__7DB89C09' 依赖于 列'aa'
    消息 
    4922,级别 16,状态 9,第 1 行
    由于一个或多个对象访问此列,
    ALTER TABLE DROP COLUMN aa 失败。”

    因为存在了default约束,此时我们需要查找出表中该列的约束名称,删除约束,再对此列进行修改
    1.查找出表中该列的约束名称
    declare @conName varchar(50)
    select  @conName =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 ' + @conName)
    exec('alter table TableName drop column ColumName')

    二、对表distributors中address字段的其它操作
        向表中增加一个address字段: 
      
    ALTER TABLE distributors ADD COLUMN [address] varchar(30)
      从表中删除一个字段: 
      
    ALTER TABLE distributors DROP COLUMN [address] RESTRICT
      修改字段的长度或类型: 
      
    ALTER TABLE distributors ALTER COLUMN [address] varchar(20)
        给一个字段增加一个非空约束:
        
    ALTER TABLE distributors ALTER COLUMN [address] varchar(80NOT NULL
  • 相关阅读:
    asp.net超强日历
    闲话多线程的创建
    一些应该熟记于心的jQuery函数和技巧
    jQuery选择符总结
    使用OQL+SQLMAP解决ORM多表复杂的查询问题
    同样的SQL语句在查询分析器执行很快,但是网站上执行超时的诡异问题
    "开门待客"还是“送货上门”?
    使用ASP.NET MVC2+PDF.NET 构建一个简单的新闻管理程序
    使用PDF.NET数据开发框架的实体操作语言OQL构造复杂查询条件
    “批量少次”还是“少量多次”邮件通信系统效率浅谈
  • 原文地址:https://www.cnblogs.com/fredx/p/1622384.html
Copyright © 2011-2022 走看看