如何在存储过程中搜索特定的字符串出现

How to search for a specific string occurrence in stored procedures

我有一个查询在我的 SQL 数据库中选择特定的 stored procedurestriggersfunctions。我一共找回了86个

我需要找到其中哪些正在使用内部的某个字符串。 此字符串是 table.

的名称

我不想逐一打开并搜索。

我正在考虑编写一个脚本来查看这些内容并找到我需要的内容。

我想我可能需要的是 from tableNameinner join on tableNamejoin on tableName

SQL

有什么好的方法

谢谢

要在一个 SQL 服务器数据库中搜索存储过程中的一段特定文本,您可以这样做:

DECLARE @SearchText VARCHAR(100) = 'TableXYZ';
SELECT DISTINCT 
    o.name,
    o.type_desc
FROM 
    sys.sql_modules m 
    INNER JOIN sys.objects o ON m.object_id = o.object_id
WHERE 
    m.[definition] Like '%' + @SearchText + '%';

显然,这有点乱,如果您的 table 名称被称为 "SELECT" 之类的愚蠢名称,这将无法解决,因为这只会导致大量误报结果。

一种替代方法是使用 sys.dm_sql_referencing_entities 系统 table,但我的经验是它不可信。一般来说,由于一些糟糕的设计决策,依赖项不能很好地与 SQL 服务器一起工作,例如延迟名称解析。

Microsoft SQL 将涵盖 Access、Sybase 和 SQL 服务器(可能还有更多)....但我怀疑您正在使用 SQL 服务器,因此我建议sys.dm_sql_referencing_entities 而不是搜索特定字符串的定义 -

SELECT r.* , o.type_desc, m.definition
FROM sys.dm_sql_referencing_entities('dbo.TableName', 'OBJECT') AS r
    INNER JOIN sys.all_objects AS o
        ON o.[object_id] = r.referencing_id
    INNER JOIN sys.sql_modules AS m
        ON m.[object_id] = o.[object_id];

这里简单易用Sql query

SELECT name
FROM   sys.procedures
WHERE  Object_definition(object_id) LIKE '%strHell%'

这里是 link 了解更多信息