以下提供一些场景,各位举一反三自行发挥
修改所有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
来源:https://www.cnblogs.com/cdoneiX/p/12258506.html