由于数据库设计变更,需要将库里所有的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