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
  • 相关阅读:
    not syncing: Attempted to kill init
    PhpStudy如何开启Apache的gzip压缩功能?
    去掉桌面图标快捷箭头
    PS中10种样式操作
    Mysql数据库报错1264
    宝塔建站
    VB错误说明
    Flash的swf文件破解
    PS快捷键
    Mysql双向同步热备份设置
  • 原文地址:https://www.cnblogs.com/cdoneiX/p/12258506.html
Copyright © 2011-2022 走看看