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
  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/cdoneiX/p/12258506.html
Copyright © 2011-2022 走看看