修改存储过程的指定参数类型
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中的三值逻辑
- SQL Server 作业批量停止
- 结束SQL阻塞的进程
- 动态生成SQL Server视图作业
- SQL Server 语句操纵数据库
- SQL(结构化查询语句)
- oracle sql日期比较
- linux快速部署mysql服务器
- sql 存储过程分页
- 在WINXP系统上安装SQL Server企业版的方法
- 通过批处理调用SQL的方法(osql)
- SQL Server 存储过程的分页
- ASP程序与SQL存储过程结合使用详解
- SQL SERVER编写存储过程小工具
- 防御SQL注入攻击时需要注意的一个问题
- PostgreSQL教程(十九):SQL语言函数
- SQL Server复制需要有实际的服务器名称才能连接到服务器
- SQL Server 2000向SQL Server 2008 R2推送数据图文教程