【问题标题】:How to search text in all database objects in MS SQL Server如何在 MS SQL Server 中搜索所有数据库对象中的文本
【发布时间】:2017-02-20 00:43:02
【问题描述】:

我可以在过程和触发器中搜索 "" 中的确切文本。 但我需要在%% 中搜索所有数据库对象中的所有短语的字符串

【问题讨论】:

  • 请在您的问题中添加更多细节,不确定您的意思是“在程序和函数中我可以搜索确切的文本”or“我可以在程序和函数中搜索确切的文本”... . 无论哪种方式,您要查找的关键字都是LIKE

标签: sql-server sql-server-2008 sql-server-2008-r2


【解决方案1】:
select * from sys.sql_modules 
where definition like '%test%'

关于 SYS.SQL_Modules 的一些信息

为作为 SQL Server 中 SQL 语言定义模块的每个对象返回一行,包括本机编译的标量用户定义函数。 P、RF、V、TR、FN、IF、TF 和 R 类型的对象具有关联的 SQL 模块

使用sp_msfporeachDB,可以在所有数据库中测试;

EXECUTE master.sys.sp_MSforeachdb 'USE [?]; 

if db_id()>4'
Begin
select * from sys.sql_modules where defintion like ''%test%''
end

【讨论】:

    【解决方案2】:
    SELECT ROUTINE_TYPE,* FROM INFORMATION_SCHEMA.ROUTINES WHERE 
    CHARINDEX( 'test',ROUTINE_DEFINITION)>0
    
    SELECT VIEW_DEFINITION,* FROM INFORMATION_SCHEMA.VIEWS WHERE 
    CHARINDEX('test',VIEW_DEFINITION)>0
    
    SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE 
    (CHARINDEX( 'col1',COLUMN_NAME)>0 OR CHARINDEX( 'tab2',TABLE_NAME)>0)
    

    我们使用 charindex 来提高搜索性能,而不是使用 Percentile (Like '%test%') 的类似运算符

    【讨论】:

    • 您能分享一下您是如何测试性能改进的吗?真的很感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多