我知道這個查詢可以從 SQL Server 存盤程序中提取參考的表。
例如,如果我有這個存盤程序:
UPDATE tbl1
SET symbol = tbl2.symbol, symbol2 = tbl2.symbol2
FROM tbl1
JOIN tbl2 ON tbl1.PK = tbl2.PK
這個查詢:
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
和這個:
SELECT
o.name
FROM
sys.sql_modules sm
INNER JOIN sys.objects o ON
o.object_id = sm.object_id
WHERE
sm.definition LIKE '%<table name>%'
都回傳tbl1&tbl2作為回應。
我的問題是:tb11是 SQL 顯示的 ReadWrite,tbl2是 ReadOnly。
如何更新我的查詢以進行區分?
所以我的輸出應該是:
Response
========
tbl1, ReadWrite
tbl2, ReadOnly
謝謝!
uj5u.com熱心網友回復:
嘗試sys.sql_dependencies,例如
select object_name(d.referenced_major_id) referenced_object,
object_name(d.object_id) referenced_by,
max(cast(d.is_updated as int)) is_updated
from sys.sql_dependencies d
join sys.objects o
on d.object_id = o.object_id
where o.type_desc = 'SQL_STORED_PROCEDURE'
group by d.referenced_major_id, d.object_id
order by d.object_id
但請注意,不會跟蹤具有延遲名稱決議的程序和使用動態 SQL 訪問表的存盤程序
uj5u.com熱心網友回復:
DMVsys.dm_sql_referenced_entities包含此資訊。
以下查詢應該可以準確地滿足您的需求
SELECT
name,
referenced_entity_name,
is_updated
FROM sys.procedures p
CROSS APPLY sys.dm_sql_referenced_entities(SCHEMA_NAME(p.schema_id) '.' p.name,'OBJECT') r
WHERE referenced_minor_name IS NULL;
資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/333472.html
標籤:sql sql-server 查询语句 存储过程
上一篇:將列更新為重復
下一篇:在GROUPBY查詢中劃分值
