【问题标题】:Find all stored procedures that reference another stored procedure查找引用另一个存储过程的所有存储过程
【发布时间】:2017-02-10 08:53:42
【问题描述】:

我想找到所有对数据库对象的直接和间接引用。

我正在使用以下查询,但我发现了问题。

DECLARE @Search varchar(255)
SET @Search = 'Employee'

; WITH CTE AS 
(
    SELECT DISTINCT
        o.name AS Object_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 '%' + @Search + '%'

    UNION ALL

    SELECT 
        o.name AS Object_Name, o.type_desc
    FROM 
        sys.sql_modules m 
    INNER JOIN 
        sys.objects o ON m.object_id = o.object_id
    INNER JOIN 
        cte AS c ON c.Object_Name = o.name
)
SELECT * 
FROM Cte 

但我得到一个错误:

消息 530,第 16 级,状态 1,第 3 行
声明终止。在语句完成之前,最大递归 100 已用完。

【问题讨论】:

标签: sql sql-server sql-server-2008 database-administration


【解决方案1】:

这里是有效的代码

DECLARE @Search varchar(255)
SET @Search = 'Employee'

; WITH CTE AS 
(
    SELECT DISTINCT o.name AS Object_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 '%' + @Search + '%'

    UNION ALL

    SELECT o.name AS Object_Name, o.type_desc
    FROM sys.sql_modules m 
    INNER JOIN sys.objects o ON m.object_id = o.object_id
    , cte AS c
    WHERE m.definition LIKE '%' + c.Object_Name + '%'
      AND o.name <> c.Object_Name
)
SELECT * 
FROM Cte 
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多