有没有试过因为写过多的存储过程,在变更表字段的时候,那些存储过程而烦恼的呢?
下面这里就可以解决你的问题啦,他可以帮你找出那些存储过程含有你指定搜索的字符串。
xtype 的意思:
C =CHECK 约束
D = 默认值或 DEFAULT 约束
F =FOREIGNKEY 约束
L = 日志
FN = 标量函数
IF= 内嵌表函数
P = 存储过程
PK =PRIMARYKEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ =UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
D = 默认值或 DEFAULT 约束
F =FOREIGNKEY 约束
L = 日志
FN = 标量函数
IF= 内嵌表函数
P = 存储过程
PK =PRIMARYKEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ =UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
SQL语句的内容:
SET NOCOUNT ON
declare @T_objs table
(
objname varchar(1000)
)
declare @T_objText table
(
objname varchar(max)
)
declare @T_result table
(
objname varchar(max)
)
insert into @T_objs select [name] from sysobjects where xtype='fn'
declare @name nvarchar(1000)
declare @sqlText varchar(max)
set @sqlText=''
set @name=''
select top 1 @name=objname from @T_objs
while @@rowcount >0
begin
insert @T_objText exec sp_helpText @name
select @sqlText=@sqlText+objname from @T_objText
delete @T_objText
insert into @T_objText select replace(replace(replace(@sqlText,char(13)+char(10),''),'',''),'','')
--print replace(replace(replace(@sqlText,char(13)+char(10),''),'',''),'','')
if exists(select * from @T_objText where objname like '%SearchText1%' and objname like'%SearchText2%')--多条件控制
begin
insert into @T_result select @name
end
set @sqlText=''
delete @T_objs where @name=objname
delete @T_objText
select top 1 @name=objname from @T_objs
end
select * from @T_result
declare @T_objs table
(
objname varchar(1000)
)
declare @T_objText table
(
objname varchar(max)
)
declare @T_result table
(
objname varchar(max)
)
insert into @T_objs select [name] from sysobjects where xtype='fn'
declare @name nvarchar(1000)
declare @sqlText varchar(max)
set @sqlText=''
set @name=''
select top 1 @name=objname from @T_objs
while @@rowcount >0
begin
insert @T_objText exec sp_helpText @name
select @sqlText=@sqlText+objname from @T_objText
delete @T_objText
insert into @T_objText select replace(replace(replace(@sqlText,char(13)+char(10),''),'',''),'','')
--print replace(replace(replace(@sqlText,char(13)+char(10),''),'',''),'','')
if exists(select * from @T_objText where objname like '%SearchText1%' and objname like'%SearchText2%')--多条件控制
begin
insert into @T_result select @name
end
set @sqlText=''
delete @T_objs where @name=objname
delete @T_objText
select top 1 @name=objname from @T_objs
end
select * from @T_result
大家也可以将这条SQL语句写成一个函数或者存储过程的话,那就更方便使用啦。
2012-09-07补充:
如果数据库采用了架构的方式的话,就要在找对象的时候确认架构的UID了。
select [name] from sysobjects where xtype='p' AND uid=[x]
其中[x]代表你的构架UID
2012-10-23补充:
优化使用架构的方式查询:
insert into @T_objs select b.[name]+'.'+a.[name] from sysobjects a JOIN sys.schemas b ON a.[uid]=b.[schema_id] where b.name='[x]' AND xtype='fn'
替换SQL中的:
insert into @T_objs select [name] from sysobjects where xtype='fn'
其中[x]代表你的构架名称