如何一次性修改字段类型
我的系统设计时没考虑繁体中文,文本字段都用了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 @sql=@sql+'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 @sql=@sql+'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<=@LEN_ID) BEGIN declare @sql nvarchar(4000) declare @table varchar(200) set @table=(select name from #3 where p_id=@p_id) set @sql='' select @sql=@sql+'alter table '+@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(@table) exec (@sql) set @p_id=@p_id+1 END
[解决办法]
alter table tablename alter column columnname nvarchar(n)