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

摘要:
a、 长度)+')'--**为什么要修改属性FROMsyscolumnsaleftjoinsystypesbona。x类型=b。xusertypeinnerjoinsysobjectsdona。id=d。idandd。xtype='U'添加名称<

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

修改所有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数据库表字段属性》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面unity Mathf 数学运算汇总下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL修改排序规则是否一定重建表

官方文档: alter table: https://dev.mysql.com/doc/refman/5.7/en/alter-table.html online ddl: https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html 其中都没有讲明修改整个表排序规则,...

sqlserver 拼接字符串分割

CREATE FUNCTION [dbo].[fnQuerySplit]( @string VARCHAR(MAX) ,--待分割字符串 @separator VARCHAR(255)--分割符 ) RETURNS @array TABLE ( item VARCHAR(255) ) AS BEGIN DE...

自定义Mybatis Plus代码生成器(增加Vo类的生成)

最近有在学习使用mybatis plus,了解到使用mp代码生成器可以方便快捷的生成代码,为了适用于自己开发需要,自定义了一个mp的代码生成器,增加了几个小功能: 1.增加了Vo类的生成,其实思路很简单,利用生成的entity实体类,复制一份,替换掉其中的几个关键字就可以了。 2.可以根据表名,根据参数判断是否去掉前缀,然后根据剩余部分自动生成包名,在批量...

系统接口权限设计

  一、     前言 随着时代发展和技术的进步,系统也在不断发展和完善,从原有的单一的企业开发使用,到现在的跨平台、多系统、多用户的集成对接开发模式。系统的发展也是非常迅速的,很多设计和对接模式也需要不断的改仅和升级。现在的一个系统往往不单单是某一个团队开发、使用,而是多个团队同时开发不同的模块,以及现在的系统往往是平台化的,一些第三方在使用对接的时候,...

DELPHI移动端支付宝支付

Delphi XE7 Android 应用接入支付宝SDK的方法     1      应用场景和准备工作: 采用XE系列开发的android apps。 apps中需要集成支付宝的支付能力。 支付到指定的商家(一般就是软件开发商自己啦),商家需要事先在支付宝的开放平台申请开通【支付宝无线快捷支付】,具体请百度。 开通【无线快捷支付】后,支付宝应该返回给...

MySql 获取当前节点及递归所有上级节点

-- MySql 获取当前节点及递归所有上级节点 -- 参数说明:resultField:查询返回字段,idd 要查询的资源ID值,idFieldName ID字段名,parentIdFieldName 上级ID字段名,tableName 表名,isContainMySelf 是否包含自己 DROP procedure IF EXISTS pro_g...