修改儲存過程的指定引數型別

2021-07-03 12:02:25 字數 3570 閱讀 3858

use linecheckdb

go--檢視儲存過程原始碼(proc/view/function/trigger都可)

alter

procedure mp_helptext

@name varchar(255)

asdeclare @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')

endif( 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

endgo

--判斷該儲存過程是否滿足要求

create

procedure mp_name

@name varchar(255),

@output

intoutput--返回1表示,該儲存過程滿足要求

asdeclare @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))

endend

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

exec mp_helptext @name

endfetch

next

from aa into @name

set @count += @output

endprint @count

close aa

deallocate aa

end

儲存過程的引數

儲存過程的引數 儲存過程如何與呼叫者進行互動呢,互動方式之一就是引數。注意 宣告變數的那句話就不需要了!引數 名字 型別 查詢 set uname call test4 2,uname select uname as myunameaa 結果 其實 end前面的select my uname 也是不...

使用IN型別引數執行Oracle儲存過程。

該執行緒包含一些示例 這些示例 顯示了從vb執行oracle儲存過程和函式的方法。希望使用者發現它們有用。僅以in型別作為引數模式的oracle procedure。create or replace procedure deptins dno dept.deptno type,dn dept.dn...

修改儲存過程

修改儲存過程 alter procedure owner procedure name procedure definition procedure definition 請參見create procedure 語句。alter procedure owner procedure name set ...