查看数据库中的文件对象含有哪个字符串

 

有没有试过因为写过多的存储过程,在变更表字段的时候,那些存储过程而烦恼的呢?

下面这里就可以解决你的问题啦,他可以帮你找出那些存储过程含有你指定搜索的字符串。

xtype 的意思:

C =CHECK 约束
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

大家也可以将这条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]代表你的构架名称

原文地址:https://www.cnblogs.com/magic_evan/p/2095653.html