SQL Server: неверный синтаксис рядом с «DUMP» - PullRequest
0 голосов
/ 29 августа 2018

У меня есть следующие хранимые процедуры для создания дампов базы данных в 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
Неверный синтаксис рядом с ключевым словом «с». Если этот оператор является общим табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен заканчиваться точкой с запятой.

Сообщение 102, уровень 15, состояние 1, процедура sp_univ_backupMSDB, строка 22 * ​​1013 * Неверный синтаксис рядом с 'DUMP'.

Сообщение 319, уровень 15, состояние 1, процедура sp_univ_backupMSDB, строка 22 * ​​1016 * Неверный синтаксис рядом с ключевым словом «с». Если этот оператор является общим табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен заканчиваться точкой с запятой.

Сообщение 102, Уровень 15, Состояние 1, Процедура sp_univ_backupTran, Строка 50
Неверный синтаксис рядом с 'DUMP'.

Сообщение 319, уровень 15, состояние 1, процедура sp_univ_backupDB, строка 26
Неверный синтаксис рядом с ключевым словом «с». Если этот оператор является общим табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен заканчиваться точкой с запятой.

Может кто-нибудь помочь мне исправить этот SQL?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Проверьте исходную базу данных на предмет местоположения этих логических устройств, используя sys.backup_devices представление каталога.

В SQL Server нет команды DUMP. Но сценарии будут работать нормально, если вы замените DUMP на BACKUP для резервных копий базы данных и BACKUP LOG для резервного копирования транзакций и если у вас есть логические устройства резервного копирования, определенные в новой базе данных.

0 голосов
/ 29 августа 2018

Я обнаружил, что некоторые потоки обсуждают это, но его использование предшествует моему времени на SQL Server. Похоже, что эта команда использовалась до BACKUP; Я не могу найти ни одного сайта, в котором бы подробно рассказывалось, чем они отличаются.

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

...