sqlserver中用游标,拼接sql,批量修改数据库字段类型

来源:互联网 发布:松江报警主机怎样编程 编辑:程序博客网 时间:2024/05/29 04:49

由于数据库设计变更,需要将库里所有的nvarchar(2000)变为nvarchar(1000),以及decimal(8,2)变为decimal(8,4)

刚开始以为字段不多,改了10几个,如下



--修改合同用章类型从int改为varchar(36)
alter table P.a alter column a NVARCHAR(36) null 
alter table .  alter column NVARCHAR(36) null 
alter table .  alter column NVARCHAR(36) null 
alter table .  alter column NVARCHAR(36) null 
alter table .  alter column NVARCHAR(36) null 
alter table .  alter column NVARCHAR(36) null 


用游标实现如下

declare AlterCursor cursor for   --定义
select TABLE_NAME,COLUMN_NAME  from information_schema.COLUMNS
 where TABLE_SCHEMA = 'PropertySecede' and DATA_TYPE = 'nvarchar' and CHARACTER_MAXIMUM_LENGTH = 2000    --查找
 declare @table_name nvarchar(100),
               @column_name nvarchar(100),
  @str_alterTable nvarchar(1000),
  @str_alterColumn nvarchar(1000)
open AlterCursor
fetch next from AlterCursor into 
@table_name,@column_name
while @@fetch_status=0
begin




fetch next from AlterCursor into
@table_name,@column_name


--拼接sql
set @str_alterTable ='alter table tablename.'+@table_name
set @str_alterColumn =' alter column '+@column_name + ' NVARCHAR(1000) null '
print @str_alterTable + @str_alterColumn
--EXEC (@str_alterTable + @str_alterColumn)
end
close AlterCursor
DEALLOCATE AlterCursor