SQL Server:'DUMP'附近的语法不正确

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server:'DUMP'附近的语法不正确相关的知识,希望对你有一定的参考价值。

我有以下存储过程在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吗?

答案

我找到了一些讨论这个问题的线程,但是这个用法在SQL Server之前的时间比较早。看来这是BACKUP之前使用的命令;我找不到任何详细说明它们如何不同的网站。

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=200855

另一答案

使用sys.backup_devices目录视图检查原始数据库中这些逻辑设备的位置。

SQL Server中没有DUMP命令。但是,如果将DUMP替换为BACKUP用于数据库备份,并使用BACKUP LOG替换事务备份,并且在新数据库中定义了逻辑备份设备,则脚本将正常工作。

以上是关于SQL Server:'DUMP'附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

[Microsoft][ODBC SQL Server Driver][SQL Server]拒绝了对对象'用户信息'(数据库'lianxi',所有者'db

sql server 日期范围查询

连接失败: SQLState:'01000' SQL Server 错误: 53 [Microsoft][ODBC SQL Server Driver][DBNETLIB]Connec

数据库SQL server中 replace使用方法

sql server修改列名语句

查询SQL Server执行过的SQL语句