您的位置:首页 > 数据库

修改存储过程的指定参数类型

2015-06-26 15:04 302 查看
use LineCheckDB
go

--查看存储过程源码(proc/view/function/trigger都可)
alter procedure mp_helptext
@name varchar(255)
as
declare @object_id int,
@sourcecode varchar(max),
@line varchar(max),
@end int,
@rn varchar(2),
@tab varchar(1)

--declare @source table(
--  source varchar(max)
--)

set @rn = char(13)+char(10)
set @tab = char(9)

begin

--从sys.sql_modules获得无换行源码
select @sourcecode = definition from sys.sql_modules where object_id=object_id(@name)

--换行
while(charindex(@rn,@sourcecode)!=0)
begin
set @end=charindex(@rn,@sourcecode)
set @line = replace(substring(@sourcecode,1,@end-1),@tab,@tab+@tab)
if(charindex('create',@line)<>0 and (charindex('proc',@line)<>0 or charindex('view',@line)<>0 or charindex('function',@line)<>0 or charindex('trigger',@line)<>0))
begin
set @line = replace(@line,'create','alter')
end
if( PATINDEX('[--]%', @line) <= 0 and (
PATINDEX('%@checkitem_serial_number%', @line) > 0 or
PATINDEX('%@checkitem_scan%', @line) > 0   ))
set @line = REPLACE(@line, '(30)', '(MAX)')
--insert into @source(source) values(@line)
print @line
set @end = @end + 2
set @sourcecode = substring(@sourcecode,@end,len(@sourcecode))
end

--insert into @source(source) values(@sourcecode)
--insert into @source(source) values('GO')
--print @line
print ('GO')
--select * from @source
end
go


--判断该存储过程是否满足要求
create procedure mp_name
@name varchar(255),
@output int output--返回1表示,该存储过程满足要求
as
declare @object_id int,
@sourcecode varchar(max),
@line varchar(max),
@end int,
@rn varchar(2),
@tab varchar(1)

set @rn = char(13)+char(10)
set @tab = char(9)

begin

select @sourcecode = definition from sys.sql_modules where object_id=object_id(@name)

while(charindex(@rn,@sourcecode)!=0)
begin
set @end=charindex(@rn,@sourcecode)
set @line = replace(substring(@sourcecode,1,@end-1),@tab,@tab+@tab)

--需要修改的存储过程,输出1
if( PATINDEX('[--]%', @line) <= 0 and (
PATINDEX('%@checkitem_serial_number%', @line) > 0 or
PATINDEX('%@checkitem_scan%', @line) > 0   ))
begin
set @output = 1
break
end
--  or (PATINDEX('[--]%', @line) > 0 and patindex('%[吖-座]%', @line) > 0)
set @end = @end + 2
set @sourcecode = substring(@sourcecode,@end,len(@sourcecode))
end

end
go


--修改存储过程的指定参数类型
declare @count int = 0
declare @output int = 0
declare @name varchar(250)
declare aa cursor for
select name from sys.objects where type = 'P' and name not like 'sp_%' and name <> 'mp_helptext' and name <> 'mp_name' order by name

begin
open aa
fetch next from aa into @name
while @@FETCH_STATUS = 0
begin
set @output = 0
exec mp_name @name, @output output
if(@output = 1)
begin
--print @name

b2cb
exec mp_helptext @name
end
fetch next from aa into @name
set @count += @output
end

print @count
close aa
deallocate aa

end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql