有多个表中有一字段为PartNo或fmid,fpid,为varchar(20),因业务需要,现要将其长度改为varchar(100),请教高手如何实现?
例:
  表 fact_goods 含fpid
  表 fact_raw 含fmid
  表 fact_pmrelate 含fpid,fmid,此表参照fact_goods 中fpid,fact_raw 中fmid,请问如何才能一次性将其长度增加至varchar(100),谢谢!

解决方案 »

  1.   

    或者说遍历所有的表就可以了,
    找到匹配的column则修改表,没有找到则不修改.
      

  2.   

    1.如果知道哪几张表,那么通过下面的更新语句就能实现
    Alter Table fact_goods Alter column fpid Varchar(100) Null
    Alter Table fact_raw Alter column fmid Varchar(100) NullAlter Table fact_pmrelate Alter column fpid Varchar(100) Null
    Alter Table fact_pmrelate Alter column fmid Varchar(100) Null2.如果不知道哪几张表,那么通过循环表 及 字段更新
    Select * From Sysobjects where xtype='u' 找出所有表
    select * from syscolumns where id=object_id('表名') 找出表中的所有字段
    找到后用更新语句更新即可
    这种操作比较复杂,建议使用第一种方式
      

  3.   

    谢谢大家的回复,问题是主要有很多参照关系的存在。alter table fact_raw
    alter column fmid varchar(100)
    go 消息 5074,级别 16,状态 1,第 1 行
    对象'PK_FACT_RAW' 依赖于 列'fmid'。
    消息 5074,级别 16,状态 1,第 1 行
    对象'FK_MERGERRA_RELATIONS_FACT_RAW' 依赖于 列'fmid'。
    消息 5074,级别 16,状态 1,第 1 行
    对象'FK_FACT_PMR_REF_3848_FACT_RAW' 依赖于 列'fmid'。
    消息 4922,级别 16,状态 9,第 1 行
    由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN fmid 失败。