zoukankan      html  css  js  c++  java
  • 批量修改SQLServer数据库表字段属性

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

    修改所有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
  • 相关阅读:
    Java回调理解 (step by step)
    Android中网络流量控制(防火墙)——Iptables
    JavaScript学习总结1
    怎样在Android实现桌面清理内存简单Widget小控件
    linux文件夹介绍
    git版本号回滚
    页面载入完毕后表单获得焦点
    (转)Arcgis for JS之Cluster聚类分析的实现
    (转)Arcgis for javascript实现百度地图ABCD marker的效果
    (转)Hadoop入门进阶课程
  • 原文地址:https://www.cnblogs.com/cdoneiX/p/12258506.html
Copyright © 2011-2022 走看看