SQL Server 如何搜索我的SQL数据库以引用视图、进程、表等定义中的任何术语?

cvxl0en2  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(121)

我如何搜索我的SQL数据库中引用的任何术语是在定义视图,Sprocs,表等?我不希望搜索数据内容,而是搜索出现在数据库中的对象的定义中的术语。
建议的解决方案必须包括TABLES以及其他数据库工件。

aiqt4smr

aiqt4smr1#

下面是一段时间以来我一直在改进的脚本,它由两个独立的查询组成,这两个查询结合在一起生成综合输出;第一个查询扫描除表之外的所有数据库工件,第二个查询扫描表定义。基于StackOverflow上其他地方找到的各种技巧。为了方便起见,这个脚本将它们放在一起。)我在SQL Server 2012上使用这个脚本。
澄清:这个脚本与我在其他地方看到的其他脚本相比是独一无二的,因为它将标准DEFINITIONS搜索脚本***(它不搜索表定义***)与表名和列名的列表结合在一起,以便也对TABLE定义应用搜索条件。

declare @SearchTerm varchar(max) = '%Role%'

select found.*
  from (
        -- Scripted artifacts, e.g. Views, Sprocs, etc.
        select schema_name(o.schema_id) as [Schema], 
               o.Name as [Name], 
               o.type as [Type]
          from sys.sql_modules m
          full JOIN sys.objects o ON o.object_id = m.object_id
         where m.definition like @SearchTerm
            or o.Name like @SearchTerm
        UNION ALL
        -- Tables
        select distinct 
               schema_name(tab.schema_id) as [Schema],
               tab.name as [Name],
               'T' as [Type]
            from sys.columns col
            join sys.tables  tab on col.object_id = tab.object_id
         where col.name like @SearchTerm
            or tab.name like @SearchTerm
       ) found
 -- Add in any filters if you wish to limit the results
 where found.[Schema] <> 'zzz'

相关问题