当前位置: 代码迷 >> Sql Server >> 怎么一次性修改字段类型
  详细解决方案

怎么一次性修改字段类型

热度:24   发布时间:2016-04-27 14:38:55.0
如何一次性修改字段类型
我的系统设计时没考虑繁体中文,文本字段都用了varchar(n)、text,最近移植到繁体下,需要变更为
nvarchar(n)、ntext,由于很多表很多字段,一个个改太麻烦了,有没有通过语句一次性改的?
另外有些字段用char(n),也想一起变更为nvarchar(n)

------解决方案--------------------
SQL code
alter table tablename alter column columnname nvarchar(n)
------解决方案--------------------
建议你修改之前先备份。
------解决方案--------------------
SQL code
--一次性修改declare @sql nvarchar(4000)set @sql=''select @[email protected]+'alter table 表名 alter column '+name+' nvarchar(255)'from syscolumns where id=OBJECT_ID(N'表名')exec (@sql)
------解决方案--------------------
~~错了
------解决方案--------------------
参考3楼可以实现
------解决方案--------------------
在三楼的基础上 加个判断就可以了
------解决方案--------------------
syscolumns 表中
where xtype=35 的 你就把属性改成 ntext
where xtype=167 的 你就把属性改成 nvarchar
where xtype=175 的 你就把属性改成 nchar
------解决方案--------------------
SQL code
--修改过之后  join XTYPE  declare @sql nvarchar(4000)set @sql=''select @[email protected]+'alter table 表名 alter column '+a.name+''''+b.name+''' ('+convert(nvarchar,a.length)+')'from syscolumns a join systypes b on a.xtype=b.xtype  where a.id=OBJECT_ID(N'表名') select @sqlexec (@sql)
------解决方案--------------------
探讨
另外,数据库下有几十个表,怎么遍历一下?

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

引用:
另外,数据库下有几十个表,怎么遍历一下?

用Cursor,从系统表syscolumns 里遍历。

------解决方案--------------------
探讨
另外,数据库下有几十个表,怎么遍历一下?

------解决方案--------------------
SQL code
--我自己没有测试过,不敢测试,反正逻辑就是这样的,直接写WHILE语句循环 select name,p_id= identity(int,1,1)  into #3 from sys.tables  select * from #3  declare @p_id int,@LEN_ID int SET @LEN_ID=(SELECT COUNT(*) FROM #3) SET @p_id=1 SELECT @LEN_ID,@p_id while (@p_id<[email protected]_ID) BEGIN    declare @sql nvarchar(4000)    declare @table varchar(200)    set @table=(select name from #3 where [email protected]_id)    set @sql=''    select @[email protected]+'alter table [email protected]+' alter column '+a.name+''+b.name+' ('+convert(nvarchar,a.length)+')    '    from syscolumns a join systypes b on a.xtype=b.xtype      where a.id=OBJECT_ID(@table)    exec (@sql)    set @[email protected]_id+1 END
------解决方案--------------------
alter table tablename alter column columnname nvarchar(n)
  相关解决方案