/*--调用示例:
exec p_set
--*/
if exists (select * from dbo.sysobjects where id = object_id(N@#[dbo].[p_set]@#) and OBJECTPROPERTY(id, N@#IsProcedure@#) = 1)
drop procedure [dbo].[p_set]
GO
create procedure p_set
as
declare tb cursor for
SELECT sql=@#alter table [@#+d.name
+@#] alter column [@#+a.name+@#] n@#
+b.name+@#(@#+cast(a.length*2 as varchar)+@#)@#
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype=@#U@# and d.name<>@#dtproperties@#
where
b.name in(@#char@#,@#varchar@#)
and
not exists(SELECT 1 FROM sysobjects where xtype=@#PK@# and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) --主键不能修改
order by d.name,a.name
declare @sql varchar(1000)
open tb
fetch next from tb into @sql
while @@fetch_status = 0
begin
exec(@sql)
fetch next from tb into @sql
end
close tb
deallocate tb
go
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/










