首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 查詢引用指定表的存儲過程:syscomments 系統表實戰

     編輯:MySQL 資料庫相關知識

核心查詢

SELECT DISTINCT OBJECT_NAME(id) AS ProcedureName
FROM syscomments
WHERE [text] LIKE '%target_table_name%'
  AND OBJECTPROPERTY(id, 'IsProcedure') = 1;

關鍵點解析

  • syscomments:儲存所有存儲過程、觸發器、視圖、預設值、規則的原始文本
  • OBJECTPROPERTY(id, 'IsProcedure') = 1:過濾僅保留存儲過程,排除觸發器/視圖
  • GROUP BY OBJECT_NAME(id) 或 DISTINCT:去重,同一過程可能多次引用該表

進階:同時搜尋表名與列名

SELECT OBJECT_NAME(id), [text]
FROM syscomments
WHERE [text] LIKE '%target_table%'
  AND [text] LIKE '%target_column%'
  AND OBJECTPROPERTY(id, 'IsProcedure') = 1;

現代替代方案 (SQL Server 2008+)

-- 使用 sys.sql_modules 替代 syscomments (支援 >4000 字符定義)
SELECT OBJECT_NAME(object_id) AS ProcedureName
FROM sys.sql_modules
WHERE definition LIKE '%target_table_name%'
  AND OBJECTPROPERTY(object_id, 'IsProcedure') = 1;

sys.sql_modules.definition 為 nvarchar(max),無 4000 字符截斷問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved