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
  • 相关阅读:
    Nexus 3048的NX-OS升级方法
    ASA防火墙忘记密码之后的恢复步骤
    关闭AnyConnect登录安全警告窗口
    使用vASA842配置ASDM645
    SSL 证书格式普及,PEM、CER、JKS、PKCS12
    Python基础练习
    理解管理信息系统
    各大搜索引擎蜘蛛的UserAgent
    iOS应用程序内购/内付费
    iOS开发解决:iOS8.1中UIBarButtonItem的setTitleTextAttributes对Disabled颜色设置无效问题
  • 原文地址:https://www.cnblogs.com/cdoneiX/p/12258506.html
Copyright © 2011-2022 走看看