首页 > 数据库技术 > 详细

批量修改SQLServer数据库表字段属性

时间:2020-02-04 11:15:29      阅读:117      评论:0      收藏:0      [点我收藏+]

以下提供一些场景,各位举一反三自行发挥

修改所有varchar为nvarchar,同时保持字段长度一致

declare c_sql cursor for
      SELECT sql = alter table [ + d.name + ] alter column [ + a.name +
       ] nvarchar(+Convert(varchar,a.length)+) --** 修改为什么属性
  FROM syscolumns a
  left join systypes b
    on a.xtype = b.xusertype
 inner join sysobjects d
    on a.id = d.id
   and d.xtype = U
   and d.name <> dtproperties
 where b.name = varchar
   and not exists
 (SELECT 1
          FROM sysobjects
         where xtype = PK
           and name in (SELECT name
                          FROM sysindexes
                         WHERE indid in (SELECT indid
                                           FROM sysindexkeys
                                          WHERE id = a.id
                                            AND colid = a.colid))) --** 排除主键修改
 order by d.name, a.name
 
 
declare @sql varchar(1000)
     open c_sql
     fetch next from c_sql into @sql
     while @@fetch_status = 0
     begin
     --select @sql
        exec(@sql)
     fetch next from c_sql into @sql
     end
     close c_sql
     deallocate c_sql 

修改所有字段smalldatetime为datetime类型且非空

declare c_sql cursor for
      SELECT sql = alter table [ + d.name + ] alter column [ + a.name +
       ] datetime not null --** 修改为什么属性
  FROM syscolumns a
  left join systypes b
    on a.xtype = b.xusertype
 inner join sysobjects d
    on a.id = d.id
   and d.xtype = U
   and d.name <> dtproperties
 where b.name = smalldatetime
   and not exists
 (SELECT 1
          FROM sysobjects
         where xtype = PK
           and name in (SELECT name
                          FROM sysindexes
                         WHERE indid in (SELECT indid
                                           FROM sysindexkeys
                                          WHERE id = a.id
                                            AND colid = a.colid))) --** 排除主键修改
 order by d.name, a.name
 
 
declare @sql varchar(1000)
     open c_sql
     fetch next from c_sql into @sql
     while @@fetch_status = 0
     begin
     --select @sql
        exec(@sql)
     fetch next from c_sql into @sql
     end
     close c_sql
     deallocate c_sql 

 

**给所有字段添加默认值,以varchar为例:

 

declare c_sql cursor for
      SELECT sql = ALTER TABLE +d.name+ ADD  CONSTRAINT [DF_+d.name+_+a.name+]  DEFAULT (‘‘‘‘) FOR [+a.name+] --** 修改为什么属性
  FROM syscolumns a
  left join systypes b
    on a.xtype = b.xusertype
 inner join sysobjects d
    on a.id = d.id
   and d.xtype = U
   and d.name <> dtproperties
 where b.name = nvarchar
   and not exists
 (SELECT 1
          FROM sysobjects
         where xtype = PK
           and name in (SELECT name
                          FROM sysindexes
                         WHERE indid in (SELECT indid
                                           FROM sysindexkeys
                                          WHERE id = a.id
                                            AND colid = a.colid))) --** 排除主键修改
 order by d.name, a.name
 
 
declare @sql varchar(1000)
     open c_sql
     fetch next from c_sql into @sql
     while @@fetch_status = 0
     begin
     --select @sql
        exec(@sql)
     fetch next from c_sql into @sql
     end
     close c_sql
     deallocate c_sql

 

批量修改SQLServer数据库表字段属性

原文:https://www.cnblogs.com/cdoneiX/p/12258506.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!