我想知道某個表dbo.person
是否正在我的數據庫的任何數據庫視圖中使用。這個數據庫中有很多的意見。使用SQL Server - 有沒有辦法查詢'創建視圖'SQL
我可以右鍵單擊每個視圖「Script View as - > CREATE To」查看用於構建此視圖的SQL,但這需要很長時間。
我想知道是否有任何方法來查詢所有這些「創建視圖爲」腳本,看看他們中有沒有提到我的表dbo.person
。
我希望這很清楚。
我想知道某個表dbo.person
是否正在我的數據庫的任何數據庫視圖中使用。這個數據庫中有很多的意見。使用SQL Server - 有沒有辦法查詢'創建視圖'SQL
我可以右鍵單擊每個視圖「Script View as - > CREATE To」查看用於構建此視圖的SQL,但這需要很長時間。
我想知道是否有任何方法來查詢所有這些「創建視圖爲」腳本,看看他們中有沒有提到我的表dbo.person
。
我希望這很清楚。
您可以查詢系統目錄中的視圖(並使用sql_modules
獲取視圖定義),然後使用系統視圖sys.sql_expression_dependencies
發現其中的這些觀點參考dbo.Person
:
SELECT ViewName = QUOTENAME(OBJECT_SCHEMA_NAME(v.[object_id])) + '.' + QUOTENAME(v.Name),
m.[Definition]
FROM sys.views AS v
INNER JOIN sys.sql_modules AS m
ON m.[object_id] = v.[object_id]
WHERE EXISTS
( SELECT 1
FROM sys.sql_expression_dependencies AS d
WHERE d.Referenced_id = OBJECT_ID(N'dbo.Person', 'U')
AND v.[object_id] = d.referencing_id
)
ORDER BY ViewName;
有some small issues with sys.sql_expression_dependencies
,但我還是更傾向於使用這個比搜索'%person%'
,因爲這可能帶回10秒,或100秒額外的結果,任何時候一個包含人的表格(例如dbo.PersonAddress
)被引用,或者person
被用作別名(SELECT Forename + surname AS Person
)等等。這實際上取決於您是否在尋找某些在大多數情況下準確的事情,但有時可能會錯過參考,或者您是否需要抓住所有的解決方案,將帶來額外的結果。
我通常使用這個SQL查找定義。我沒有在VIEWS
上過濾,以防在其他地方使用它。
SELECT
so.name, so.type, sm.Definition
FROM
sys.objects AS so INNER JOIN sys.sql_modules AS sm ON so.object_id = sm.object_id
WHERE
sm.Definition LIKE N'%dbo.person%'
ORDER BY so.name
你可以嘗試
select * from INFORMATION_SCHEMA.VIEWS
where VIEW_DEFINITION like '%Person%'
您可能需要更改WHERE到dbo.person或[人]
請查詢Information_Schema.View_Table系統視圖
select * from INFORMATION_SCHEMA.VIEW_TABLE_USAGE where TABLE_NAME = 'Emp'
試試這個
SELECT DISTINCT m.definition, 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 '%person%'
and type_desc = 'VIEW'
如需更詳細的字符串搜索上的SQL Server數據庫對象定義請參閱SQL Object Where Used List script
你可以簡單地調用像
exec SearchInObjectsText 'name'
,它會返回程序,功能,視圖等,其中使用文本「名稱」
我知道這並不直接回答問題,但它回答了這個問題。我使用Redgate的第三方加載項SQLSearch。它是免費的,我不是員工,所以這不是任何形式的「插件」。