iT邦幫忙

0

請問這個SQL語法如何修正呢?

utopia 2012-11-22 16:36:5014510 瀏覽

原始.sql如下
請各位大大幫忙看一下

DECLARE @DB_NAME SYSNAME
DECLARE @DB_BACKUP_PATH VARCHAR(120)
DECLARE @JOB VARCHAR(120)

SET @DB_NAME='dbdb' --實際資料庫名稱

SET @DB_BACKUP_PATH='E:\SQL_backup\'+@DB_NAME+'_'+CONVERT(VARCHAR(8),GETDATE(),112)+'.BAK' --備份路徑
SELECT @DB_BACKUP_PATH

SET @JOB='BACKUP DATABASE '+ @DB_NAME +' TO DISK= '+@DB_BACKUP_PATH+' WITH INIT'
EXEC(@JOB)
GO

DECLARE @DATE NVARCHAR(50)
SET @DATE=CONVERT(VARCHAR(50),DATEADD(DAY,-29,GETDATE()),112) --PRINT @DATE --刪除30天之前的資料
DECLARE @SQL_CMD NVARCHAR(800)
SET @SQL_CMD='EXECUTE master.dbo.xp_delete_file 0,N''E:\SQL_backup\'',N''*'',N'''+@DATE+'''' --PRINT @SQL_CMD
EXEC SP_EXECUTESQL @SQL_CMD


錯誤訊息如下


E:\SQL_backup\dbdb_20121122.BAK
訊息 102, 層級 15, 狀態 1, 伺服器 IBMSVR\SQLEXPRESS, 行 1
接近 'E:' 之處的語法不正確。
訊息 319, 層級 15, 狀態 1, 伺服器 IBMSVR\SQLEXPRESS, 行 1
接近關鍵字 'with' 的語法不正確。如果這個陳述式是一般資料表運算式或 xmlnamespaces 子句,前一個陳述式就必須以分號結束。

(1 個受影響的資料列)

1 個回答

8
simon0627
iT邦新手 2 級 ‧ 2012-11-23 09:27:29
最佳解答

utopia提到:
SET @JOB='BACKUP DATABASE '+ @DB_NAME +' TO DISK= '+@DB_BACKUP_PATH+' WITH INIT'
EXEC(@JOB)

缺少單引號
SET @JOB='BACKUP DATABASE '+ @DB_NAME +' TO DISK='' '+@DB_BACKUP_PATH+''' WITH INIT'
EXEC(@JOB)

utopia iT邦新手 3 級 ‧ 2012-11-26 17:06:06 檢舉

謝謝大大的回應,
但加了單引號後,
變成如下錯誤:

訊息 911, 層級 16, 狀態 11, 伺服器 IBMSVR\SQLEXPRESS, 行 1
無法判斷項目在資料庫 'dbdb' 的 sysdatabases 中的位置。找不到該名稱的項目。請確定名稱輸入正確。
訊息 3013, 層級 16, 狀態 1, 伺服器 IBMSVR\SQLEXPRESS, 行 1
BACKUP DATABASE 正在異常結束。

可是明明就有dbdb資料庫啊?!!

utopia iT邦新手 3 級 ‧ 2012-11-29 16:22:27 檢舉

sorry,的確是我將DB名字打錯了,現在已經可以run了
但是run完E:\SQL_backup\資料夾底下
竟找不到任何*.BAK
不知這又是何原因呢?

我要發表回答

立即登入回答