【发布时间】:2019-02-04 15:08:20
【问题描述】:
我有以下存储过程在 SQL Server 2008 R2 和 2016 中创建数据库转储,这些存储过程已经存在于数据库中,我将它们移动到不同的数据库
PRINT N'Creating [dbo].[sp_univ_backupDB]'
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE Procedure [dbo].[sp_univ_backupDB]
/*****************************************************************
* This proc is scheduled to run daily and creates a full database
* backup of the following databases
*
* Database Device
* --------- -----------
* Einvapp einv_daily
* Master mst_daily
*
*****************************************************************/
AS
DUMP DATABASE master TO mst_daily WITH INIT, SKIP
DUMP DATABASE einvapp TO einv_daily WITH INIT, SKIP
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[sp_univ_backupMSDB]'
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE Procedure [dbo].[sp_univ_backupMSDB]
/*****************************************************************
* This proc is scheduled to run daily and creates a full database
* backup of the following databases
*
* Database Device
* --------- -----------
* msdb msdb_daily
*
*
*
*
*****************************************************************/
AS
DUMP DATABASE msdb TO msdb_daily WITH INIT, SKIP
DUMP DATABASE arceapp TO arceapp_daily WITH INIT, SKIP
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
PRINT N'Creating [dbo].[sp_univ_backupTran]'
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[sp_univ_backupTran]
/*****************************************************************
* This proc is scheduled to run hourly and creates a full transaction
* log backup of the following databases
*
* Database Device
* --------- -----------
* einvapp
* Master
*
*****************************************************************/
AS
DECLARE @Hour CHAR(4),
@DiskDev VARCHAR(20)
SELECT @hour = Right(+'00' + RTRIM(CONVERT(char(2),DATEPART(hour,GETDATE()))) +'00',4)
SELECT @DiskDev = (SELECT CASE @HOUR
WHEN '0500' THEN 'tran_0500'
WHEN '0600' THEN 'tran_0600'
WHEN '0700' THEN 'tran_0700'
WHEN '0800' THEN 'tran_0800'
WHEN '0900' THEN 'tran_0900'
WHEN '1000' THEN 'tran_1000'
WHEN '1100' THEN 'tran_1100'
WHEN '1200' THEN 'tran_1200'
WHEN '1300' THEN 'tran_1300'
WHEN '1400' THEN 'tran_1400'
WHEN '1500' THEN 'tran_1500'
WHEN '1600' THEN 'tran_1600'
WHEN '1700' THEN 'tran_1700'
WHEN '1800' THEN 'tran_1800'
WHEN '1900' THEN 'tran_1900'
ELSE 'NONE'
END)
IF @diskDev <> 'NONE'
DUMP TRANSACTION einvapp TO @diskDev WITH INIT, SKIP
GO
IF @@ERROR <> 0 SET NOEXEC ON
GO
当我运行上述脚本时,它在 SQL Server 2008 R2 和 2016 中都失败并出现以下错误:
消息 102,级别 15,状态 1,过程 sp_univ_backupDB,第 25 行
'DUMP' 附近的语法不正确。消息 319,级别 15,状态 1,过程 sp_univ_backupDB,第 25 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。消息 102,级别 15,状态 1,过程 sp_univ_backupMSDB,第 22 行
'DUMP' 附近的语法不正确。消息 319,级别 15,状态 1,过程 sp_univ_backupMSDB,第 22 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。消息 102,级别 15,状态 1,过程 sp_univ_backupTran,第 50 行
'DUMP' 附近的语法不正确。消息 319,级别 15,状态 1,过程 sp_univ_backupDB,第 26 行
关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。
有人可以帮我修复这个 SQL 吗?
【问题讨论】:
-
你的意思是备份吗?
-
@UnhandledExcepSean 它应该是 BACKUP 而不是 DUMP?这些存储过程最初是在
SQL Server 03 or 05上开发的。现在我们正在将这些存储过程迁移到不同的数据库并正在运行它 -
我找不到用于 SQL Server 搜索 Web 的转储关键字。您当前从哪个版本的数据库迁移?
-
我在网上发现一些旧线程谈论 DUMP 是一个有效命令,直到它在 SQL Server 2008 中被删除。我认为 BACKUP 将是您正在寻找的命令。
-
感谢您的更新,您能否分享有关从 SQL Server 2008 中删除 DUMP 的线程,以便我们记录它并对 BACKUP 进行更改。也请将其发布为答案,以便我接受它
标签: tsql stored-procedures sql-server-2008-r2 sql-server-2016