如何在存储过程中标识视图的已使用列

时间:2019-03-01 19:08:19

标签: sql sql-server

数据库 D1 中有一个视图 View1 ,其中有 Column1 列, Column2 Column3

视图 View1 被存储在存储过程 PROC1 中的另一个数据库 D2 中。强>
存储过程 PROC1 中仅使用 Column2 ,而未使用其他列

视图 View1 被存储在存储过程 PROC2 中的另一个数据库 D3 中。强>
在存储过程 PROC2 中使用了 Column1 Column2 ,而未使用其他列

我们如何确定 View1 的哪一列在存储过程 PROC1 PROC2 中被占用使用查询。

我有将近100个视图在多个数据库中使用,我需要知道存储过程在其各自的数据库中使用了哪些所有列。

2 个答案:

答案 0 :(得分:0)

您可以执行:

exec sp_depends'视图名称'

这将返回所有引用该视图的对象(包括过程)。您必须检查命名的proc本身,以确定该过程中使用了哪些列。

答案 1 :(得分:0)

在数据库中,您可以标识存储过程中column1的使用位置:

DECLARE @Search VARCHAR(255)
SET @Search = 'Column1'

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 + '%' 
    AND type_desc = 'SQL_STORED_PROCEDURE'
ORDER BY 
    2, 1

如果您要查找其他数据库,请添加[differentDBname].sys.sql_modules