我的查询在我的SQL数据库中选择了特定的stored procedures
,triggers
和functions
。我总共找回了86个。
我需要找到其中哪些正在使用某个字符串。
此字符串是table
的名称。
我不想单独打开每一个并搜索它。
我正在考虑使用一个可以查看这些内容的脚本并找到我需要的内容。
我认为我可能需要的是from tableName
或inner join on tableName
或join on tableName
等等
在SQL
谢谢
答案 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了解详情