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

时间:2015-04-09 14:57:10

标签: sql sql-server function tsql stored-procedures

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

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

我不想单独打开每一个并搜索它。

我正在考虑使用一个可以查看这些内容的脚本并找到我需要的内容。

我认为我可能需要的是from tableNameinner join on tableNamejoin on tableName等等

SQL

中执行该操作的好方法是什么?

谢谢

3 个答案:

答案 0 :(得分:1)

Microsoft SQL将涵盖Access,Sybase和SQL Server(可能还有更多)....但我怀疑您使用的是SQL Server,因此我建议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];

答案 1 :(得分:0)

要在一个SQL Server数据库中搜索存储过程中的特定文本,您可以执行以下操作:

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 + '%';

显然,这有点像黑客,如果你的表名被称为像#34; SELECT"因为这只会导致大量假阳性结果。

另一种方法是使用sys.dm_sql_referencing_entities系统表,但我对此的体验是它不可信任。一般来说,由于一些糟糕的设计决策,依赖关系不能很好地与SQL Server一起工作,例如:延期名称解析。

答案 2 :(得分:0)

这是一个简单易用的Sql query

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

此处有link了解详情