DECLARE @Text VARCHAR(MAX); SELECT @Text = Text FROM SysComments WHERE Id = (SELECT Id FROM SysObjects WHERE Name = 'ProcName'); PRINT @Text;
⚠️ 缺點: 長文字會被截斷(Text 欄位為 NVARCHAR(4000) 分段儲存)。
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 字元,超長程序顯示不全。
EXEC Sp_HelpText 'ProcName';
✅ 優點: 按行回傳,無長度限制、格式完整、可直接複製執行。
✅ 推薦用於: 所有版本、所有長度程序。
| 方法 | 完整性 | 長度限制 | 格式 | 適用場景 |
|---|---|---|---|---|
| SysComments | 分段需自行組裝 | 單段 4000 字元 | 原始分段 | SQL 2000 相容 |
| Sys.Sql_Modules | 完整 | PRINT 8000 字元 | 完整保留 | 中短程序檢視 |
| Sp_HelpText | 完整 | 無 | 逐行輸出 | 通用最佳 |
獲取預存程序定義首選 Sp_HelpText,無長度限制、格式完美。Sys.Sql_Modules 適合程式化存取。SysComments 僅供舊版相容參考。