我的系统设计时没考虑繁体中文,文本字段都用了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)
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
- 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)