Tsql SQL Server:靠近'的语法不正确;转储';

Tsql SQL Server:靠近'的语法不正确;转储';,tsql,stored-procedures,sql-server-2008-r2,sql-server-2016,Tsql,Stored Procedures,Sql Server 2008 R2,Sql Server 2016,我在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] /**********************************

我在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
PRINT N'Creating[dbo].[sp_univ_backupDB]'
去
在上设置带引号的\u标识符
去
将ANSI_空值设置为ON
去
创建过程[dbo]。[sp_univ_backupDB]
/*****************************************************************
*此进程计划每天运行,并创建一个完整的数据库
*备份以下数据库
*
*数据库设备
*   ---------   -----------
*Einvapp einv_每日
*mst_大师日报
*
*****************************************************************/
作为
每天使用INIT、SKIP将数据库主机转储到mst_
每天使用INIT将数据库einvapp转储到einv_,跳过
去
如果@错误0将NOEXEC设置为ON
去
打印而不是创建[dbo].[sp_univ_backupMSDB]'
去
将带引号的U标识符设置为OFF
去
将ANSI_NULL设置为OFF
去
创建过程[dbo]。[sp_univ_backupMSDB]
/*****************************************************************
*此进程计划每天运行,并创建一个完整的数据库
*备份以下数据库
*
*数据库设备
*   ---------       -----------
*每日新闻
*   
*   
*
*
*****************************************************************/
作为
每天使用INIT将数据库msdb转储到msdb_,跳过
每天使用INIT将数据库arceapp转储到arceapp_,跳过
去
如果@错误0将NOEXEC设置为ON
去
打印不创建[dbo].[sp大学备份]'
去
在上设置带引号的\u标识符
去
将ANSI_空值设置为ON
去
创建过程[dbo]。[sp_univ_backupTran]
/*****************************************************************
*此进程计划每小时运行一次,并创建一个完整事务
*以下数据库的日志备份
*
*数据库设备
*   ---------   -----------
*einvapp
*主人
*
*****************************************************************/
作为
声明@Hour CHAR(4),
@DiskDev VARCHAR(20)
选择@hour=Right(+'00'+RTRIM(转换(char(2),DATEPART(hour,GETDATE()))+'00',4)
选择@DiskDev=(选择CASE@HOUR
当“0500”时,然后是“tran_0500”
当“0600”时,然后是“tran_0600”
当“0700”时,然后是“tran_0700”
当'0800'然后'tran_0800'
当'0900'然后'tran_0900'
当“1000”然后是“tran_1000”
当“1100”时,然后是“tran_1100”
当“1200”然后是“tran_1200”
当“1300”时,然后是“tran_1300”
当“1400”时,然后是“tran_1400”
当'1500'然后'tran_1500'
当“1600”时,然后是“tran_1600”
当‘1700’时,然后是‘tran_1700’
当“1800”时,然后是“tran_1800”
当“1900”时,然后是“tran_1900”
“没有”
(完)
如果@diskDev“无”
使用INIT将事务einvapp转储到@diskDev,跳过
去
如果@错误0将NOEXEC设置为ON
去
当我运行上述脚本时,它在SQL Server 2008 R2和2016中都会失败,并出现以下错误:

Msg 102,15级,状态1,程序sp_univ_backupDB,第25行
“DUMP”附近的语法不正确

Msg 319,15级,状态1,程序sp_univ_backupDB,第25行
关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止

Msg 102,15级,状态1,程序sp_univ_backupMSDB,第22行
“DUMP”附近的语法不正确

Msg 319,15级,状态1,程序sp_univ_backupMSDB,第22行
关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止

Msg 102,15级,状态1,程序sp_univ_backupTran,第50行
“DUMP”附近的语法不正确

Msg 319,15级,状态1,程序sp_univ_backupDB,第26行
关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止


有人能帮我修复这个SQL吗?

我发现一些帖子在讨论这个问题,但使用时间比我在SQL Server上的时间早了一点。这似乎是备份之前使用的命令;我找不到任何网站详细说明它们的不同之处


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


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

您的意思是备份吗?@UnhandledExcepSean它应该是备份而不是转储吗?这些存储过程最初是在
SQL Server 03或05
上开发的。现在我们正在将这些存储过程迁移到不同的数据库,并且正在运行它。我找不到SQL Server在web上搜索的转储关键字。您当前正在从哪个版本迁移数据库?我在网上发现一些旧线程在SQL Server 2008中将DUMP删除之前一直认为DUMP是有效的命令。我认为备份将是您正在寻找的命令。感谢更新,您可以分享关于从SQL Server 2008中删除转储的线程,以便我们记录它并更改备份。也请把它作为答案贴出来,这样我就可以接受了