資料庫系統開發過程中需撰寫大量預存程序。為統一格式、簡化開發,設計兩個工具預存程序自動產生 Insert 與 Update 程式碼,作為後續開發基礎。
sp_GenInsert @TableName, @StoredProcedureName
| 參數 | 說明 |
|---|---|
| @TableName | 目標資料表名稱 |
| @StoredProcedureName | 要產生的預存程序名稱 |
EXEC sp_GenInsert 'Employees', 'INS_Employees'
產生完整的 Insert 預存程序,包含所有欄位參數。注意:若原表有識別欄位 (Identity),產生的程式碼中會包含 SET IDENTITY_INSERT ON,需手動移除。
sp_GenUpdate @TableName, @PrimaryKey, @StoredProcedureName
| 參數 | 說明 |
|---|---|
| @TableName | 目標資料表名稱 |
| @PrimaryKey | 主鍵欄位名稱 |
| @StoredProcedureName | 要產生的預存程序名稱 |
EXEC sp_GenUpdate 'Employees', 'EmployeeID', 'UPD_Employees'
CREATE PROCEDURE UPD_Employees
@EmployeeID int,
@LastName nvarchar(40),
@FirstName nvarchar(20),
@Title nvarchar(60),
@TitleofCourtesy nvarchar(50),
@BirthDate datetime,
@HireDate datetime,
@Address nvarchar(120),
@City nvarchar(30),
@Region nvarchar(30),
@PostalCode nvarchar(20),
@Country nvarchar(30),
@HomePhone nvarchar(48),
@Extension nvarchar(8),
@Photo image,
@Notes ntext,
@ReportsTo int,
@PhotoPath nvarchar(510)
AS
UPDATE Employees
SET
LastName = @LastName,
FirstName = @FirstName,
Title = @Title,
TitleofCourtesy = @TitleofCourtesy,
BirthDate = @BirthDate,
HireDate = @HireDate,
Address = @Address,
City = @City,
Region = @Region,
PostalCode = @PostalCode,
Country = @Country,
HomePhone = @HomePhone,
Extension = @Extension,
Photo = @Photo,
Notes = @Notes,
ReportsTo = @ReportsTo,
PhotoPath = @PhotoPath
WHERE EmployeeID = @EmployeeID
| 優勢 | 限制 |
|---|---|
| 統一命名慣例與程式碼風格 | 產生的程式碼需人工檢查調整 |
| 大幅減少重複撰寫參數宣告 | Identity 欄位需手動處理 SET IDENTITY_INSERT |
| 自動對應資料型別與長度 | 複雜業務邏輯仍需手工實作 |
| 降低拼字錯誤與欄位遺漏 | 不處理觸發器、檢查條件約束等 |
| 加速原型開發與 CRUD 基礎建構 | 僅支援單一資料表操作 |
@SchemaName 參數支援多結構描述TRY-CATCH 錯誤處理區塊MERGE 模式 (Upsert) 版本完整 sp_GenInsert 與 sp_GenUpdate 實作程式碼可參考原文連結或自行實作:核心邏輯為查詢 INFORMATION_SCHEMA.COLUMNS 取得欄位中繼資料,動態組裝 T-SQL 字串並列印輸出。