字段存在哪些表中存在 都有记录
如何一次性调整某字段的类型后 将他所在的表内的该字段的类型 统一调整一致
例如fld1为char(20)  我要将fld1改为varchar(200) 
要求结果 把fld1所在表内的类型都修改为varchar(200)
create table tbfldgx
(tbname varchar(20) null,
 fldname varchar(20) null
)insert into tbfldgx
(tbnane,fldname)select 'tb1','fld1'
union
select 'tb1','fld2'
union
select 'tb1','fld3'
union
select 'tb2','fld2'
union
select 'tb2','fld3'
union
select 'tb3','fld1'
union
select 'tb3','fld2'
union
select 'tb3','fld3'
union
select 'tb4','fld1'
如果不使用游标 如何实现此功能

解决方案 »

  1.   

    以上使用数据库为 SQL2008R2
      

  2.   

    从sys.columns里面找到这些列存放起来,然后使用case when一次性更新。楼主我觉得你的思想要彻底改变一下,先对自己说,从来没有游标这个东西,这样你的编程才有效果,如果每次第一个想到的就是游标,那么总有一天你会妥协给自己的惯性思维
      

  3.   

    select
    'ALTER TABLE '+a.name +' ALTER  COLUMNS '+b.name + '  DEFAULT ''''  VARCHAR(200) '
    from
     sysobjects a,syscolumns b 
    where
     a.type = 'U' 
    and
     b.id= a.id
    and
         a.name='fid1'把打印出来的结果拿出来执行
      

  4.   

    select
    'ALTER TABLE '+a.name +' ALTER  COLUMNS '+b.name + '   VARCHAR(200) '
    from
     sysobjects a,syscolumns b 
    where
     a.type = 'U' 
    and
     b.id= a.id
    and
         a.name='fid1'修改3楼
      

  5.   

    select
    'ALTER TABLE '+a.name +' ALTER  COLUMNS '+b.name + '   VARCHAR(200) '
    from
     sysobjects a,syscolumns b 
    where
     a.type = 'U' 
    and
     b.id= a.id
    and
         a.name='fid1'修改3楼
      

  6.   

    掌握动态语句 exec()
    视图 sys.objects sys.columns 
    即可自己解决
      

  7.   

    目前使用该功能时发现一个问题:
    数据表中字段 bh 在60个表中存在字段类型为 CHAR(10) 并且在很多表中都存在索引
    现在我要将字段类型更改为 VARCHAR(20)
    执行打印的结果是提示:ALTER TABLE TABLE1 ALTER  COLUMN BH   VARCHAR(20) NULL
    --执行结果如下
    消息 5074,级别 16,状态 1,第 1 行
    索引'TABLE1' 依赖于 列'BH'。
    消息 4922,级别 16,状态 9,第 1 行
    由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN BH 失败。
    请问如何 批处理这样的情况啊。最好不要动索引 因为表太多了 。