如何从含动态查询的存储过程中获取表操作明细
存储过程表操作类型识别问题
现有两张表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
相关产品推荐
相关产品推荐

