如何在存储过程中搜索特定的字符串出现
How to search for a specific string occurrence in stored procedures
我有一个查询在我的 SQL 数据库中选择特定的 stored procedures
、triggers
和 functions
。我一共找回了86个
我需要找到其中哪些正在使用内部的某个字符串。
此字符串是 table
.
的名称
我不想逐一打开并搜索。
我正在考虑编写一个脚本来查看这些内容并找到我需要的内容。
我想我可能需要的是 from tableName
或 inner join on tableName
或 join 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 了解更多信息
我有一个查询在我的 SQL 数据库中选择特定的 stored procedures
、triggers
和 functions
。我一共找回了86个
我需要找到其中哪些正在使用内部的某个字符串。
此字符串是 table
.
我不想逐一打开并搜索。
我正在考虑编写一个脚本来查看这些内容并找到我需要的内容。
我想我可能需要的是 from tableName
或 inner join on tableName
或 join 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 了解更多信息