以下提供一些场景,各位举一反三自行发挥
修改所有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