簡體   English   中英

SQL Server 2005搜索某些數據庫對象的視圖

[英]SQL Server 2005 search views for certain database objects

SQL Server中是否有一種方法可以列出從特定對象加入的數據庫中的所有視圖?

即:找到從表myTable加入的所有視圖

您可以使用sys.sql_dependencies

select object_name(object_id),* 
from sys.sql_dependencies
where referenced_major_id = object_id('<tablename>');

這將列出依賴於您的表的所有對象,您可以通過加入sys.views將其限制為視圖:

select v.* 
from sys.sql_dependencies d
join sys.views v on d.object_id = v.object_id
where referenced_major_id = object_id('<tablename>');

您必須搜索代碼,並且您只有兩個選項。 請參閱下面的評論,為什么其他方法不可靠。

select
    object_name(m.object_id), m.*
from
    sys.sql_modules m
where
    m.definition like N'%my_view_name%'

或使用OBJECT_DEFINITION

syscomments和INFORMATION_SCHEMA具有nvarchar(4000)列。 因此,如果在位置3998使用“myViewName”,則無法找到它。 syscomments確實有多行但ROUTINES截斷。

在SQL Server 2000中,sys.depends不可靠,這會影響菜單中的“查看依賴項”。 我不知道它在SQL 2005+中是否更好。 示例:view使用表,刪除並重新創建表,具有不同的objectid,dependency = broken。

在SQL Server 2005中,您可以結合使用sys.sql_dependencies和對對象文本進行強力解析(如gbn的答案)。 有關SQL Server 2005依賴項的詳細信息,請參閱http://msdn.microsoft.com/en-us/library/ms345449(SQL.90).aspx

在SQL Server 2008中,有新的依賴DMV和目錄視圖比以前的方法(sys.dm_sql_referenced_entities / sys.dm_sql_referencing_entities / sys.sql_expression_dependencies)更值得信賴,但它仍然很容易打破它們。

有關使這項工作更好的一些想法,請參閱此文章 另請參閱http://msdn.microsoft.com/en-us/library/bb677168.aspx

以下是未知提供的鏈接中的一些示例(如果該站點在stackoverflow之前消失)

對於SQL Server 2005,右鍵單擊表名並選擇“查看依賴項”

SQL Server提到的一些SQL唯一方法:

SELECT routine_name, routine_type FROM INFORMATION_SCHEMA.ROUTINES
  WHERE ROUTINE_DEFINITION LIKE '%Employee%'

EXEC sp_depends @objname = N'HumanResources.Employee' ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM