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

SQL Server 獲取預存程序定義的三種方法對比

     編輯:關於SqlServer

預存程序優勢回顧

  • 模組化重用、減少網路傳輸
  • 預編譯執行計劃、效能優於臨時 SQL
  • 權限控制、安全性增強

三種獲取定義的方法

方法一:SysComments 系統表(舊版相容)

DECLARE @Text VARCHAR(MAX);
SELECT @Text = Text
FROM SysComments
WHERE Id = (SELECT Id FROM SysObjects WHERE Name = 'ProcName');
PRINT @Text;

⚠️ 缺點: 長文字會被截斷(Text 欄位為 NVARCHAR(4000) 分段儲存)。

方法二:Sys.Sql_Modules 目錄視圖(推薦)

DECLARE @Def NVARCHAR(MAX);
SELECT @Def = Definition
FROM Sys.Sql_Modules SM
JOIN Sys.Objects O ON SM.Object_Id = O.Object_Id
WHERE O.Name = 'ProcName' AND O.Type = 'P';
PRINT @Def;

✅ 優點: 完整定義、格式保留。
⚠️ 缺點: PRINT 限制 8000 字元,超長程序顯示不全。

方法三:Sp_Helptext 系統預存程序(最佳)

EXEC Sp_HelpText 'ProcName';

✅ 優點: 按行回傳,無長度限制、格式完整、可直接複製執行。
✅ 推薦用於: 所有版本、所有長度程序。

對比總結

方法完整性長度限制格式適用場景
SysComments分段需自行組裝單段 4000 字元原始分段SQL 2000 相容
Sys.Sql_Modules完整PRINT 8000 字元完整保留中短程序檢視
Sp_HelpText完整無逐行輸出通用最佳

實務建議

  • 日常檢視/複製程式碼 → Sp_HelpText
  • 程式化處理定義文字 → Sys.Sql_Modules
  • 舊版本相容維護 → SysComments

總結

獲取預存程序定義首選 Sp_HelpText,無長度限制、格式完美。Sys.Sql_Modules 適合程式化存取。SysComments 僅供舊版相容參考。

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