sp_depends 是 SQL Server 內建的系統預存程序,專門用於分析資料庫物件之間的相依關係。它能列出:哪些物件相依於指定物件(被參考方),以及指定物件參考了哪些物件(參考方)。這對於評估結構變更影響範圍、重構資料庫架構極具價值。
若所有物件皆依相依順序建立(即被參考物件先於參考物件建立),sp_depends 回傳的結果將最為準確完整。實務上,若建立順序錯誤,可能導致相依資訊遺漏或不正確。
當您打算修改某個預存程序或資料表時,先執行 sp_depends 可快速掌握有多少物件會受影響。例如某程序參考了 30 個物件,修改這 30 個物件的工作量將遠超預期,及早發現可調整開發計畫。
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'test_table' AND type = 'U')
DROP TABLE test_table;
GO
CREATE TABLE test_table (c1 VARCHAR(255) NULL);
GO
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'test_proc1' AND type = 'P')
DROP PROCEDURE test_proc1;
GO
CREATE PROCEDURE test_proc1 @name sysname = NULL
AS
IF @name IS NOT NULL
INSERT test_table VALUES (@name);
ELSE
RETURN;
GO
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'test_proc2' AND type = 'P')
DROP PROCEDURE test_proc2;
GO
CREATE PROCEDURE test_proc2
AS
DECLARE @myVar sysname;
SELECT @myVar = name FROM sysobjects WHERE id = 1;
EXEC test_proc1 @myVar;
GO
-- 查詢 test_proc1 的相依關係
EXEC sp_depends test_proc1;
GO
-- 清理測試物件
DROP PROCEDURE test_proc2, test_proc1;
GO
DROP TABLE test_table;
GO
熟練使用 sp_depends 能讓資料庫開發人員與 DBA 在變更前掌握完整影響範圍,避免因疏忽相依關係而導致的非預期錯誤,是資料庫維護與重構不可或缺的利器。