查看表被那些存储过程、函数、视图、触发器使用
2012-01-16 10:07
323 查看
1.系统自带 的sp_depends
sp_depends
显示有关数据库对象相关性的信息(例如,依赖表或视图的视图和过程,以及视图或过程所依赖的表和视图)。不报告对当前数据库以外对象的引用。
语法
sp_depends [ @objname = ] 'object'
参数
[@objname =] 'object'
被检查相关性的数据库对象。对象可以是表、视图、存储过程或触发器
如果sp_depends 'TableName' 只带出'51笔'数据
那么另一种自定义可带出 '69笔'数据, 这多少笔数据由各表所决定
2.自定义 usp_depends
create procedure dbo.usp_depends
(
@object_name nvarchar(255)
)
as
begin
set nocount on
-- check input
if @object_name like '%.%'
set @object_name = substring(@object_name, charindex('.', @object_name) + 1, 255)
set @object_name = ltrim(rtrim(@object_name))
-----------------------------------------------------------------------------
-- find objects which depends @object_name
-----------------------------------------------------------------------------
-- create temp table
create table #depend_by (obj nvarchar(255), objtype nvarchar(255), is_system_find bit null)
-- get : use dbo.sysdepends
insert into #depend_by(obj, objtype, is_system_find)
select obj, objtype, is_system_find
from (select distinct
replace(object_name(id), 'dbo.', '') as obj,
case
when 1= objectproperty(id, 'IsProcedure')
then 'stored procedure'
when 1= objectproperty(id, 'IsInlineFunction')
then 'function'
when 1= objectproperty(id, 'IsScalarFunction')
then 'function'
when 1= objectproperty(id, 'IsTableFunction')
then 'function'
when 1= objectproperty(id, 'IsTrigger')
then 'trigger'
when 1= objectproperty(id, 'IsView')
then 'view'
else ''
end as objtype,
1 as is_system_find
from dbo.sysdepends
where depid = object_id(@object_name)
) t
where not exists (select 1 from #depend_by where obj = t.obj)
-- get : use custom query from 'syscomments'
insert into #depend_by(obj, objtype, is_system_find)
select obj, objtype, 0
from (select distinct
obj = object_name(c.id)
,objtype = case
when 1= objectproperty(c.id, 'IsProcedure')
then 'stored procedure'
when 1= objectproperty(c.id, 'IsInlineFunction')
then 'function'
when 1= objectproperty(c.id, 'IsScalarFunction')
then 'function'
when 1= objectproperty(c.id, 'IsTableFunction')
then 'function'
when 1= objectproperty(c.id, 'IsTrigger')
then 'trigger'
when 1= objectproperty(c.id, 'IsView')
then 'view'
else ''
end
from dbo.syscomments c
inner join (select name from dbo.sysobjects where
name=@object_name) o
on ( c.text like '%[( ]' + o.name + ' %'
or c.text like '%[( ]' + o.name + char(13)+char(10) + '%'
or c.text like '%[( ]"' + o.name + '" %'
or c.text like '%[( ]"' + o.name + '"' + char(13)+char(10) + '%'
or c.text like '%.' + o.name + ' %'
or c.text like '%."' + o.name + '" %'
or c.text like '%.' + o.name + char(13)+char(10) + '%'
or c.text like '%."' + o.name + '"' + char(13)+char(10) + '%'
or c.text like '%[( ]![' + o.name + '!] %' escape '!'
or c.text like '%[( ]![' + o.name + '!]' + char(13)+char(10) + '%' escape '!'
or c.text like '%.![' + o.name + '!] %' escape '!'
or c.text like '%.![' + o.name + '!]' + char(13)+char(10) + '%' escape '!'
)
) t
where not exists (select 1 from #depend_by where obj = t.obj)
and obj <> @object_name
-- output results
select obj as object_depend_by, objtype as type, is_system_find
from #depend_by order by objtype, obj
-- free resource
truncate table #depend_by
drop table #depend_by
-----------------------------------------------------------------------------
-- find objects depend by @object_name
-----------------------------------------------------------------------------
if 1 = objectproperty(object_id(@object_name), 'IsTable')
return
-- create temp table
create table #depend (obj nvarchar(255), objtype nvarchar(255), is_system_find bit null)
-- get : use dbo.sysdepends
insert into #depend (obj, objtype, is_system_find)
select obj, objtype, is_system_find
from (select distinct
replace(object_name(depid), 'dbo.', '') as obj,
case
when 1= objectproperty(depid, 'IsProcedure')
then 'stored procedure'
when 1= objectproperty(depid, 'IsInlineFunction')
then 'function'
when 1= objectproperty(depid, 'IsScalarFunction')
then 'function'
when 1= objectproperty(depid, 'IsTableFunction')
then 'function'
when 1= objectproperty(depid, 'IsTrigger')
then 'trigger'
when 1= objectproperty(depid, 'IsView')
then 'view'
when 1= objectproperty(depid, 'IsTable')
then 'table'
else ''
end as objtype,
1 as is_system_find
from dbo.sysdepends
where id = object_id(@object_name)
) t
where not exists (select 1 from #depend where obj = t.obj)
-- get : use custom query from 'syscomments'
insert into #depend (obj, objtype, is_system_find)
select obj, objtype, 0
from (select distinct
obj = o.name
,objtype = case
when 1= objectproperty(o.id, 'IsProcedure')
then 'stored procedure'
when 1= objectproperty(o.id, 'IsInlineFunction')
then 'function'
when 1= objectproperty(o.id, 'IsScalarFunction')
then 'function'
when 1= objectproperty(o.id, 'IsTableFunction')
then 'function'
when 1= objectproperty(o.id, 'IsTrigger')
then 'trigger'
when 1= objectproperty(o.id, 'IsView')
then 'view'
when 1= objectproperty(o.id, 'IsTable')
then 'table'
else ''
end
from (select * from dbo.syscomments where id = object_id(@object_name)) c
inner join dbo.sysobjects o
on ( c.text like '%[( ]' + o.name + ' %'
or c.text like '%[( ]' + o.name + char(13)+char(10) + '%'
or c.text like '%[( ]"' + o.name + '" %'
or c.text like '%[( ]"' + o.name + '"' + char(13)+char(10) + '%'
or c.text like '%.' + o.name + ' %'
or c.text like '%."' + o.name + '" %'
or c.text like '%.' + o.name + char(13)+char(10) + '%'
or c.text like '%."' + o.name + '"' + char(13)+char(10) + '%'
or c.text like '%[( ]![' + o.name + '!] %' escape '!'
or c.text like '%[( ]![' + o.name + '!]' + char(13)+char(10) + '%' escape '!'
or c.text like '%.![' + o.name + '!] %' escape '!'
or c.text like '%.![' + o.name + '!]' + char(13)+char(10) + '%' escape '!'
)
) t
where not exists (select 1 from #depend where obj = t.obj)
and obj <> @object_name
-- output results
select obj as objects_depend, objtype as type, is_system_find from #depend order by objtype, obj
-- free resource
truncate table #depend
drop table #depend
end
go
sp_depends
显示有关数据库对象相关性的信息(例如,依赖表或视图的视图和过程,以及视图或过程所依赖的表和视图)。不报告对当前数据库以外对象的引用。
语法
sp_depends [ @objname = ] 'object'
参数
[@objname =] 'object'
被检查相关性的数据库对象。对象可以是表、视图、存储过程或触发器
如果sp_depends 'TableName' 只带出'51笔'数据
那么另一种自定义可带出 '69笔'数据, 这多少笔数据由各表所决定
2.自定义 usp_depends
create procedure dbo.usp_depends
(
@object_name nvarchar(255)
)
as
begin
set nocount on
-- check input
if @object_name like '%.%'
set @object_name = substring(@object_name, charindex('.', @object_name) + 1, 255)
set @object_name = ltrim(rtrim(@object_name))
-----------------------------------------------------------------------------
-- find objects which depends @object_name
-----------------------------------------------------------------------------
-- create temp table
create table #depend_by (obj nvarchar(255), objtype nvarchar(255), is_system_find bit null)
-- get : use dbo.sysdepends
insert into #depend_by(obj, objtype, is_system_find)
select obj, objtype, is_system_find
from (select distinct
replace(object_name(id), 'dbo.', '') as obj,
case
when 1= objectproperty(id, 'IsProcedure')
then 'stored procedure'
when 1= objectproperty(id, 'IsInlineFunction')
then 'function'
when 1= objectproperty(id, 'IsScalarFunction')
then 'function'
when 1= objectproperty(id, 'IsTableFunction')
then 'function'
when 1= objectproperty(id, 'IsTrigger')
then 'trigger'
when 1= objectproperty(id, 'IsView')
then 'view'
else ''
end as objtype,
1 as is_system_find
from dbo.sysdepends
where depid = object_id(@object_name)
) t
where not exists (select 1 from #depend_by where obj = t.obj)
-- get : use custom query from 'syscomments'
insert into #depend_by(obj, objtype, is_system_find)
select obj, objtype, 0
from (select distinct
obj = object_name(c.id)
,objtype = case
when 1= objectproperty(c.id, 'IsProcedure')
then 'stored procedure'
when 1= objectproperty(c.id, 'IsInlineFunction')
then 'function'
when 1= objectproperty(c.id, 'IsScalarFunction')
then 'function'
when 1= objectproperty(c.id, 'IsTableFunction')
then 'function'
when 1= objectproperty(c.id, 'IsTrigger')
then 'trigger'
when 1= objectproperty(c.id, 'IsView')
then 'view'
else ''
end
from dbo.syscomments c
inner join (select name from dbo.sysobjects where
name=@object_name) o
on ( c.text like '%[( ]' + o.name + ' %'
or c.text like '%[( ]' + o.name + char(13)+char(10) + '%'
or c.text like '%[( ]"' + o.name + '" %'
or c.text like '%[( ]"' + o.name + '"' + char(13)+char(10) + '%'
or c.text like '%.' + o.name + ' %'
or c.text like '%."' + o.name + '" %'
or c.text like '%.' + o.name + char(13)+char(10) + '%'
or c.text like '%."' + o.name + '"' + char(13)+char(10) + '%'
or c.text like '%[( ]![' + o.name + '!] %' escape '!'
or c.text like '%[( ]![' + o.name + '!]' + char(13)+char(10) + '%' escape '!'
or c.text like '%.![' + o.name + '!] %' escape '!'
or c.text like '%.![' + o.name + '!]' + char(13)+char(10) + '%' escape '!'
)
) t
where not exists (select 1 from #depend_by where obj = t.obj)
and obj <> @object_name
-- output results
select obj as object_depend_by, objtype as type, is_system_find
from #depend_by order by objtype, obj
-- free resource
truncate table #depend_by
drop table #depend_by
-----------------------------------------------------------------------------
-- find objects depend by @object_name
-----------------------------------------------------------------------------
if 1 = objectproperty(object_id(@object_name), 'IsTable')
return
-- create temp table
create table #depend (obj nvarchar(255), objtype nvarchar(255), is_system_find bit null)
-- get : use dbo.sysdepends
insert into #depend (obj, objtype, is_system_find)
select obj, objtype, is_system_find
from (select distinct
replace(object_name(depid), 'dbo.', '') as obj,
case
when 1= objectproperty(depid, 'IsProcedure')
then 'stored procedure'
when 1= objectproperty(depid, 'IsInlineFunction')
then 'function'
when 1= objectproperty(depid, 'IsScalarFunction')
then 'function'
when 1= objectproperty(depid, 'IsTableFunction')
then 'function'
when 1= objectproperty(depid, 'IsTrigger')
then 'trigger'
when 1= objectproperty(depid, 'IsView')
then 'view'
when 1= objectproperty(depid, 'IsTable')
then 'table'
else ''
end as objtype,
1 as is_system_find
from dbo.sysdepends
where id = object_id(@object_name)
) t
where not exists (select 1 from #depend where obj = t.obj)
-- get : use custom query from 'syscomments'
insert into #depend (obj, objtype, is_system_find)
select obj, objtype, 0
from (select distinct
obj = o.name
,objtype = case
when 1= objectproperty(o.id, 'IsProcedure')
then 'stored procedure'
when 1= objectproperty(o.id, 'IsInlineFunction')
then 'function'
when 1= objectproperty(o.id, 'IsScalarFunction')
then 'function'
when 1= objectproperty(o.id, 'IsTableFunction')
then 'function'
when 1= objectproperty(o.id, 'IsTrigger')
then 'trigger'
when 1= objectproperty(o.id, 'IsView')
then 'view'
when 1= objectproperty(o.id, 'IsTable')
then 'table'
else ''
end
from (select * from dbo.syscomments where id = object_id(@object_name)) c
inner join dbo.sysobjects o
on ( c.text like '%[( ]' + o.name + ' %'
or c.text like '%[( ]' + o.name + char(13)+char(10) + '%'
or c.text like '%[( ]"' + o.name + '" %'
or c.text like '%[( ]"' + o.name + '"' + char(13)+char(10) + '%'
or c.text like '%.' + o.name + ' %'
or c.text like '%."' + o.name + '" %'
or c.text like '%.' + o.name + char(13)+char(10) + '%'
or c.text like '%."' + o.name + '"' + char(13)+char(10) + '%'
or c.text like '%[( ]![' + o.name + '!] %' escape '!'
or c.text like '%[( ]![' + o.name + '!]' + char(13)+char(10) + '%' escape '!'
or c.text like '%.![' + o.name + '!] %' escape '!'
or c.text like '%.![' + o.name + '!]' + char(13)+char(10) + '%' escape '!'
)
) t
where not exists (select 1 from #depend where obj = t.obj)
and obj <> @object_name
-- output results
select obj as objects_depend, objtype as type, is_system_find from #depend order by objtype, obj
-- free resource
truncate table #depend
drop table #depend
end
go
相关文章推荐
- mySQL查看存储过程、函数、视图、触发器
- 视图、存储过程、函数、游标、触发器使用
- 查看存储过程、函数、视图和触发器
- mySQL查看存储过程、函数、视图、触发器
- 查看SQLSERVER加密存储过程,函数,触发器,视图
- mssql:t-sql;创建表;给表添加约束;使用变量;事务,索引,视图;存储过程;触发器trigger;播放器http://www.smartgz.com/blog/Article/956.asp
- 适用于SQLSERVER2000存储过程,函数,视图,触发器的破解
- 查看表、视图、索引、存储过程、触发器和包的定义
- Oracle 查看 表 存储过程 触发器 函数 等对象定义语句的方法
- mysql查看所有存储过程,函数,视图,触发器,表,分页
- 存储过程和函数、视图、触发器
- sql2005 关闭prepareStatement对象时错误,超出了存储过程、函数、触发器或视图的最大嵌套层数
- 查看SQL SERVER 加密存储过程,函数,触发器,视图
- mysql 查询表,视图,触发器,函数,存储过程
- 解决:System.Data.SqlClient.SqlException: 超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32).
- .net中查看那些函数吃CPU,使用vs自带的性能诊断工具
- MySQL之视图、存储过程、触发器、函数、事务、动态执行SQL
- Sql Server-视图 存储过程 函数 触发器 索引
- SQL解密破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
- Oracle 查看 表 存储过程 触发器 函数 等对象定义语句的方法