首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 查詢物件定義:四種方法完整比較(含系統/使用者物件)

     編輯:關於SqlServer

除 SSMS 圖介面外,四種 T-SQL 方法查詢 View、預存程序、函數、觸發器等物件定義:

方法一:OBJECT_DEFINITION(推薦、支援 MAX 長度、無截斷)

SELECT OBJECT_DEFINITION(OBJECT_ID('sys.tables'));
  • 回傳 NVARCHAR(MAX),不受 sp_helptext 4000 字元限制。
  • 適用所有模組類型(P、FN、IF、TF、V、TR、RF 等)。

方法二:sp_helptext(傳統、逐行輸出、有長度限制)

EXEC sp_helptext 'sys.tables';
  • 結果集每行 255 字元,長定義會截斷/換行,需應用層組合。
  • 不支援加密物件(WITH ENCRYPTION)。

方法三:sys.system_sql_modules(系統物件專用)

SELECT definition FROM sys.system_sql_modules WHERE object_id = OBJECT_ID('sys.tables');
  • 僅限系統物件(sys.*、INFORMATION_SCHEMA.*)。
  • 使用者物件請改用 sys.sql_modules。

方法四:sys.sql_modules(使用者物件標準視圖)

SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound
FROM sys.sql_modules 
WHERE object_id = OBJECT_ID('dbo.YourProc');
  • 標準目錄視圖,包含編譯選項(ANSI_NULLS、QUOTED_IDENTIFIER、SCHEMABINDING)。
  • 搭配 OBJECT_DEFINITION() 為現代最佳組合。

適用物件類型對照表

Type說明適用方法
PSQL Stored Procedure全部
FNScalar Function全部
IFInline Table-Valued Function全部
TFTable-Valued Function全部
VView全部
TRTrigger (DML/DDL)全部
R/RFRule / Replication Filter Proc全部
C/DCheck/Default ConstraintOBJECT_DEFINITION, sys.sql_modules

加密物件注意

WITH ENCRYPTION 物件上述方法均回傳 NULL。需依賴原始碼管控制,或使用第三方解密工具(法律/合規風險自負)。

最佳實務建議

  1. 程式碼中動態取得定義:OBJECT_DEFINITION(OBJECT_ID(@objname))。
  2. 管理腳本搜尋關鍵字:SELECT * FROM sys.sql_modules WHERE definition LIKE '%keyword%'。
  3. 備份物件定義:BCP "SELECT OBJECT_DEFINITION(object_id) FROM sys.objects WHERE type IN ('P','V','FN','IF','TF','TR')" QUERYOUT defs.sql -c -T。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved