+ -
当前位置:首页 → 问答吧 → 求批量更改字段长度的sql语句

求批量更改字段长度的sql语句

时间:2011-12-16

来源:互联网

是这样的我的sql server里有十多个数据库 总共几百张表吧,很多张表里都存在username这个字段,该字段长度是20数据类型是varchar,现在想把这个字段改成长度为50的varchar,求批量修改的sql语句

同时也求批量修改存储过程里@username的长度

作者: fayxue   发布时间: 2011-12-16

SQL code

--修改字段长度
EXEC sp_MSforeachtable @command1="if exists(Select 1 From syscolumns where id=object_id('?') and name ='userName') alter table ? Alter column userName VarChar(50)" 

--修改变量,这个还真没发现方法啊。


作者: mustudent   发布时间: 2011-12-16

SQL code
declare @sql varchar(max)=''

select @sql=@sql+'alter table '+a.name+' alter column username varchar(50);' 
  from sys.objects a,sys.columns b
where a.object_id=b.object_id and b.name='username'

exec(@sql)

作者: ssp2009   发布时间: 2011-12-16

SQL code
declare @sql varchar(max)
set @sql=''
select
 @sql=@sql+'alter table '+a.name+' alter column username varchar(50);' 
from 
 sys.objects a,sys.columns b
where
  a.object_id=b.object_id and b.name='username'
--print @sql
exec(@sql)

作者: fredrickhu   发布时间: 2011-12-16

SQL code
create proc test
(
@username varchar(100)
)

declare @sql varchar(max)
set @sql=''
select
 @sql=@sql+'alter table '+a.name+' alter column username varchar(50);' 
from 
 sys.objects a,sys.columns b
where
  a.object_id=b.object_id and b.name=@username
--print @sql
exec(@sql)

作者: fredrickhu   发布时间: 2011-12-16

存储过程里@username的长度只能手动去打开脚本修改,可以ctrl+f全部替换

作者: ssp2009   发布时间: 2011-12-16

用sp_msforeachdb對所有數據庫查找

SQL code
DECLARE @T TABLE(Script NVARCHAR(2000))
INSERT @T EXEC sp_msforeachdb 'use [?] select ''alter table [?].dbo.[''+object_Name(id)+''] alter column ''+Name+'' varchar(50);'' from syscolumns where xusertype=167 and prec=20 and OBJECTPROPERTY(ID,''IsTable'')=1'
SELECT * FROM @T --查看生成腳本

DECLARE @sql NVARCHAR(max)
SET @sql=''
SELECT @sql=@sql+Script FROM @T
EXEC (@sql)

作者: roy_88   发布时间: 2011-12-16

数据结构的事情,最好是在数据库里直接改.
有那么麻烦么?

作者: qianjin036a   发布时间: 2011-12-16