如何表列出預存程序(Stored Procesure)中用到了哪一些資料表呢?
今天在FB看到一位朋友提到他要爬出SP中用到了哪一些
Table,很有興趣爬了一些文。稍加整理爬到的做法
其一 : 利用SQL預設的sp_depends 預存程序
語法如下
USE AdventureWorks2012;
GO
EXEC sp_depends @objname = N'uspGetBillofMaterials' ;
執行結果如下
其二 : 利用SQL的sys.sysdepends資料表搭配sys.objects來寫TSQL
https://msdn.microsoft.com/zh-tw/library/ms190325(v=sql.120).aspx
語法如下
SELECT
o.name AS proc_name, oo.name AS table_name,c.name as column_name
ROW_NUMBER() OVER(partition by o.name,oo.name ORDER BY o.name,oo.name) AS row
FROM sysdepends d
INNER JOIN sysobjects o ON o.id=d.id
INNER JOIN sysobjects oo ON oo.id=d.depid
INNER JOIN SYS.COLUMNS C ON C.object_id=d.depid and C.column_id=d.depnumber
WHERE o.xtype = 'P'
執行結果如下,這語法會表列出所有SP中用到的Table及Column。
其三 : 利用SQL的sys.syscomments資料表搭配sys.objects來寫TSQL
https://msdn.microsoft.com/zh-tw/library/ms186293(v=sql.120).aspx
語法如下
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%tablename%'
執行結果如下,這語法會表列出該資料表被哪一些資料庫物件
(例如View、Function、Stored Procedure)關聯。
我是ROCK
rockchang@mails.fju.edu.tw