You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从含动态查询的存储过程中获取表操作明细

存储过程表操作类型识别问题

现有两张表table_A、table_B,以及包含动态查询的存储过程sp_A,代码如下:

CREATE PROCEDURE [dbo].[sp_A]
AS  
BEGIN
    SELECT * FROM table_A
    
    DECLARE @sql NVARCHAR(MAX) = 'UPDATE table_B SET col_2 = 2 WHERE col_1 = 1'
    EXEC sp_executesql @sql
END
GO

我需要生成一份结果列表,展示存储过程对各表执行的操作类型,示例结果如下:

SP_Name   Table_Name   Operation
--------------------------------
sp_A       table_A      SELECT
sp_A       table_B      UPDATE

我尝试过用sys.sql_expression_dependencies查询存储过程与表的依赖关系,对应的SQL语句如下:

SELECT 
    sp.[name] AS 'SP_Name', o.[name] AS 'Table_Name', sp.[type_desc]
FROM
    sys.objects AS o
INNER JOIN 
    sys.sql_expression_dependencies AS sed on o.[object_id] = sed.referenced_id
INNER JOIN 
    sys.objects AS sp ON sed.referencing_id = sp.[object_id] 
                      AND sp.[type] IN ('P', 'FN')
WHERE 
    o.[name] IN ('table_A', 'table_B')
ORDER BY 
    sp.[name]

但这个方法存在明显局限:仅适用于不含动态查询的存储过程,而且只能识别存储过程关联的表,无法获取具体的操作类型(比如SELECT/UPDATE)。

内容的提问来源于stack exchange,提问作者Harlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:04:57