有沒有一種方法可以找出使用自定義查詢或存儲過程的視圖正在使用哪些基表?我該如何檢查sql server的'views'依賴關係
回答
如果這是你經常在做的事情,那麼Red Gate SQL Dependency Tracker(不,我不爲他們工作)是一個很好的工具。如果你想嘗試一下,我認爲他們有試用期。
當我創建並運行該sp時,我得不到任何結果 – 2010-04-02 13:51:57
您可以使用sql_dependencies觀點:
select OBJECT_NAME(referenced_major_id) as DependantObject
from sys.sql_dependencies
where object_id = object_id('YourViewName')
要遞歸檢索依賴(FE,如果從一個視圖中選擇,這將發現的表是另一種觀點認爲引用):
with deps (child, parent) as (
select d.object_id, d.referenced_major_id
from sys.sql_dependencies d
where d.object_id = object_id('YourViewName')
union all
select d.object_id, d.referenced_major_id
from sys.sql_dependencies d
inner join deps on deps.parent = d.object_id
)
select OBJECT_NAME(parent)
from deps
此方法不是傻瓜證明。例如,如果使用sp_rename重命名對象,則其依賴關係不會更新。
當我運行此項時,我得不到結果 – 2010-04-02 13:51:21
在我的機器上正常工作。也許你可以發佈視圖的定義? – Andomar 2010-04-02 13:59:42
是的,它只適用於我創建的視圖,但對於由其他開發人員創建的其他視圖(我有權訪問),我獲得了0條記錄。 – 2010-04-02 14:08:36
您可以使用sys.dm_sql_referenced_entities功能來查找指定的視圖中引用的對象:
SELECT DISTINCT
referenced_schema_name ,
referenced_entity_name
FROM sys.dm_sql_referenced_entities ('Sales.vSalesPersonSalesByFiscalYears', 'OBJECT');
此外,有sys.sql_expression_dependencies系統視圖,您可以指定表名和類型引用對象的:
SELECT
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc
FROM sys.sql_expression_dependencies se
INNER JOIN sys.objects o
ON se.referencing_id = o.[object_id]
WHERE referenced_entity_name = 'Person' AND o.type_desc = 'View'
爲避免「手動」工作,您還可以使用ApexSQL Clean,這是一個可以查找所有內部和外部依賴關係的SQL Server工具。在結果窗格中選擇一個對象,並看到取決於所選擇的對象上選擇的對象依賴於所有對象,對象:
您還可以過濾對象和可視化的依賴關係:
聲明:我ApexSQL工作作爲支持工程師
希望這有助於
您可以使用sys-sql_expression_dependencies在SQL-Server> = 2008(R1 +)
注意:這將需要30秒或更長時間。
如果你只想要的意見,取出標+表值函數( 'FN' 和 'IF')。
表值函數可以是視圖的依賴關係,反之亦然,再加上view/tvf可能依賴於標量函數。
;WITH TFV_Dependencies AS
(
SELECT
--OBJECT_SCHEMA_NAME(sysdep.referencing_id) AS Referencing_Schema
ReferencingO.object_id AS ReferencingObject_Id
,sysschema.name AS Referencing_Schema
,ReferencingO.name AS Referencing_Object_Name
,sysdep.referenced_schema_name AS Referenced_Schema
,sysdep.referenced_entity_name AS Referenced_Object_Name
--,ReferencingO.type
,ReferencedO.name AS RefName
--,ReferencedO.type AS RefType
FROM sys.objects as ReferencingO
LEFT JOIN sys.schemas AS sysschema
ON sysschema.schema_id = ReferencingO.schema_id
LEFT JOIN sys.sql_expression_dependencies AS sysdep
LEFT JOIN sys.objects as ReferencedO
ON ReferencedO.name = sysdep.referenced_entity_name
ON sysdep.referencing_id = ReferencingO.object_id
AND ReferencingO.name <> sysdep.referenced_entity_name
--AND ReferencedO.type <> 'U'
AND ReferencedO.type IN ('IF', 'FN', 'V')
WHERE (1=1)
--AND ReferencingO.type NOT IN ('PK','F','UQ','SQ','D','IT', 'S')
--AND ReferencingO.type IN ('U', 'V', 'FN', 'IF', 'P')
AND ReferencingO.type IN ('IF', 'FN', 'V')
AND ReferencingO.name NOT IN
(
'dt_adduserobject'
,'dt_droppropertiesbyid'
,'dt_dropuserobjectbyid'
,'dt_generateansiname'
,'dt_getobjwithprop'
,'dt_getobjwithprop_u'
,'dt_getpropertiesbyid'
,'dt_getpropertiesbyid_u'
,'dt_setpropertybyid'
,'dt_setpropertybyid_u'
,'dt_verstamp006'
,'dt_verstamp007'
,'sp_helpdiagrams'
,'sp_creatediagram'
,'sp_alterdiagram'
,'sp_renamediagram'
,'sp_dropdiagram'
,'sp_helpdiagramdefinition'
,'fn_diagramobjects'
)
)
,DependencyGroup AS
(
-- base case
SELECT
ReferencingObject_Id AS ObjectId
,Referencing_Object_Name AS ObjectName
,Referencing_Schema AS ObjectSchema
,1 AS Lvl
FROM TFV_Dependencies
WHERE 1=1
AND Referenced_Object_Name IS NULL
-- recursive case
UNION ALL
SELECT
d.ReferencingObject_Id AS ObjectId
,d.Referencing_Object_Name AS ObjectName
,d.Referencing_Schema AS ObjectSchema
,r.Lvl + 1 AS Lvl
FROM TFV_Dependencies AS d
INNER JOIN DependencyGroup AS r
ON r.ObjectName = d.Referenced_Object_Name
)
,
CTE AS
(
SELECT TOP 999999999999999999
MAX(Lvl) AS Lvl
,ObjectId
,ObjectSchema
,ObjectName
--,'DELETE FROM [' + REPLACE(ObjectName, '''', '''''') + ']; ' AS DeleteCmd
FROM DependencyGroup
GROUP BY ObjectId, ObjectSchema, ObjectName
)
SELECT
CTE.Lvl
,CTE.ObjectSchema AS SPECIFIC_SCHEMA
,CTE.ObjectName AS SPECIFIC_NAME
,sysSqlModules.definition AS ROUTINE_DEFINITION
FROM CTE
LEFT JOIN sys.sql_modules AS sysSqlModules
ON sysSqlModules.object_id = CTE.ObjectId
ORDER BY Lvl, ObjectSchema, ObjectName
OPTION (MAXRECURSION 0)
- 1. SQL Server依賴關係
- 2. SQL Server上的全局依賴關係檢查
- 3. 如何在sql server中查找表的所有依賴關係
- 4. SQL SERVER中的外部依賴關係
- 5. SQL Server列約束和依賴關係
- 6. SQL Server代理作業依賴關係
- 7. 依賴關係的nuget依賴關係
- 8. 如何檢索SQL Server的檢查約束依賴列
- 9. SQL中的依賴關係
- 10. 查找SQL Server 2005中的依賴關係
- 11. 查看鏈接的服務器依賴關係sql server 2008
- 12. 查找SQL Server服務器數據類型的依賴關係
- 13. 依賴關係排序與循環依賴關係的檢測
- 14. 檢查依賴關係有多深?
- 15. 查找DISTINCT缺少SQL依賴關係
- 16. 從SQL查詢獲取依賴關係
- 17. 如何覆蓋依賴關係的依賴關係?
- 18. 查找SQL Server 2008計算列依賴關係
- 19. SQL Server - 查看所有外鍵依賴關係
- 20. SQL循環依賴關係
- 21. SQL - 檢查單個表的依賴關係
- 22. Unbungling我的依賴關係
- 23. 我應該如何管理AngularJS中的依賴關係?
- 24. 我該如何窺探與sinon的嵌套依賴關係
- 25. 如何查找SQL Server 2012中數據庫表之間的依賴關係
- 26. 如何調查.NET DLL依賴關係?
- 27. 如何檢查庫中的類與java中的依賴關係
- 28. 我如何找到Java依賴關係?
- 29. 如何檢查依賴關係的生成文件?
- 30. 如何從特定版本的Gem檢查Gem依賴關係?
這與.NET無關,只有SQL服務器。該標籤有點誤導:) – DaveBoltman 2017-08-02 10:35:06