此預存程序封裝動態 SQL 執行備份,支援參數驗證與錯誤回報:
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'pr_backup_db' AND xtype = 'P')
DROP PROC pr_backup_db
GO
CREATE PROC pr_backup_db
@flag VARCHAR(20) OUTPUT,
@backup_db_name VARCHAR(128),
@filename VARCHAR(1000) -- 路徑+檔名
AS
DECLARE @sql NVARCHAR(4000), @par NVARCHAR(1000)
-- 檢查資料庫是否存在
IF NOT EXISTS (SELECT * FROM master..sysdatabases WHERE name = @backup_db_name)
BEGIN
SELECT @flag = 'db not exist'
RETURN
END
-- 驗證路徑格式:需包含 \ 且不以 \ 結尾
IF RIGHT(@filename, 1) <> '\' AND CHARINDEX('\', @filename) <> 0
BEGIN
SELECT @par = '@filename VARCHAR(1000)'
SELECT @sql = 'BACKUP DATABASE ' + @backup_db_name + ' TO DISK = @filename WITH INIT'
EXEC sp_executesql @sql, @par, @filename
SELECT @flag = 'ok'
RETURN
END
ELSE
BEGIN
SELECT @flag = 'file type error'
RETURN
END
GO
DECLARE @result VARCHAR(20)
EXEC pr_backup_db @result OUTPUT, 'MyDatabase', 'D:\Backups\MyDB_20240115.bak'
PRINT @result -- 輸出 'ok' 或錯誤代碼
sp_executesql 參數化執行,防止 SQL 注入此預存程序提供標準化備份介面,適合納入自動化維護計畫或應用程式呼叫。