• 查一个表被哪些东西引用.doc - [SQL]2010-06-04

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://wr112.blogbus.com/logs/65083860.html

    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'

         &nbs


    收藏到:Del.icio.us