日期:2014-05-17  浏览次数:20554 次

求更改数据库的数据类型的sql语句,在线等
我现在建立了三个数据库,每个数据库里面有若干表,每个表有若干类型字段。

我现在需要把里面凡是varchar改成nvarchar类型。

至少可以一个数据库一个数据库的改。

求sql语句。

------解决方案--------------------
探讨

引用:
这是把DB中所有字段全部alter成 nvarchar 了吧?

引用:
SQL code

DECLARE @s VARCHAR(max)
SELECT @s=ISNULL(@s+CHAR(10),'')
+'ALTER TABLE '
+QUOTENAME(OBJECT_NAME(c.[object_id]))
+' ALTER ……

------解决方案--------------------
以下例子是针对修改单个库中的指定表将其varchar类型的字段类型改为nvarchar:

declare @num int,@tableName varchar(50),@columnName varchar(50),
@typeName varchar(50),@max_length int,@str varchar(500) = ''

declare cur_table cursor for 
with cte(num,tableName,columnName,typeName,max_length) as (
select row_number() over(order by ia.name asc) 'Num' ,
ia.name 'tableName',ib.name 'columnName',
ic.name 'typeName',ib.max_length
from test.sys.objects ia
inner join test.sys.columns ib
on ia.object_id = ib.object_id
inner join test.sys.types ic
on ib.user_type_id = ic.user_type_id
where ia.type ='U' and ia.name = 'abc'
) select num,tableName,columnName,typeName,max_length from cte;

open cur_table 
fetch next from cur_table into @num,@tableName,
@columnName,@typeName,@max_length
while(@@FETCH_STATUS = 0)
begin
if(@typeName = 'varchar')
begin
set @str = '
alter table '+@tableName+' alter column '+@columnName+' nvarchar('+str(@max_length)+')
'
exec(@str);
end
fetch next from cur_table into @num,@tableName,
@columnName,@typeName,@max_length
end
close cur_table;
deallocate cur_table;