2013-04-26 4 views
0

Когда дело дошло до того, что вам было поручено обеспечить резервное копирование, я был немного обеспокоен, потому что мы используем SQL Express и выяснили, что на самом деле нет способ управлять этим без участия скриптов. Я в порядке со сценарием в целом, но я немного несовместим с синтаксисом SQL ... Вот мой сценарий.Ошибка скрипта: SQLCMD: Неверный синтаксис рядом с ключевым словом 'with'

declare @currentDate datetime 
set @currentDate = GetDate() 
declare @fileName varchar(255) 

set @fileName = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\AlphaDB_PRD_Trans_'  
+ cast(Year(@currentDate) as varchar(4)) 
+ Replicate('0', 2 - Len(cast(Month(@currentDate) as varchar(2)))) 
    + cast(Month(@currentDate) as varchar(2)) 
+ Replicate('0', 2 - Len(cast(Day(@currentDate) as varchar(2)))) 
    + cast(Day(@currentDate) as varchar(2)) 
+ '_' +  
+ Replicate('0', 2 - Len(cast(DatePart(hour, @currentDate) as varchar(2)))) 
    + cast(DatePart(hour, @currentDate) as varchar(2))  
+ Replicate('0', 2 - Len(cast(DatePart(minute, @currentDate) as varchar(2)))) 
    + cast(DatePart(minute, @currentDate) as varchar(2)) + '.TRN'; 

BACKUP LOG [AlphaDB_PRD] TO DISK = @fileName with DESCRIPTION = N'AlphaDB_PRD-Transaction Log Backup', NOFORMAT, INIT, NAME = N'AlphaDB_PRD-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 
GO 
declare @backupSetId as int 
select @backupSetId = position from msdb..backupset where database_name=N'AlphaDB_PRD' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'AlphaDB_PRD') 
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''AlphaDB_PRD'' not found.', 16, 1) end 
RESTORE VERIFYONLY FROM DISK = @fileName WITH FILE = @backupSetId, NOUNLOAD, NOREWIND 
GO 

Я думал, что моя первая проблема была, как я был объявить переменную для filename , но фактический файл НЕ спасутся: AlphaDB_PRD_Trans_20130426_0738.TRN

Я видел эту ссылку: Incorrect syntax near the keyword 'with'. , но я получаю другую ошибку, когда Я включаю ; непосредственно перед ключевым словом WITH:

Msg 102, Level 15, State 1, Server ALPHASRVPRD, Line 17 
Incorrect syntax near '='. 
Msg 137, Level 15, State 2, Server ALPHASRVPRD, Line 4 
Must declare the scalar variable "@fileName". 

и эта ошибка возвращает меня к моей первоначальной мысли, что й e вопрос заключается в объявлении моей переменной.

+0

Принадлежит http://dba.stackexchange.com –

+0

Спасибо, я также разместил его там. когда я найду ответ, я буду включать его ниже для согласованности. –

+0

На самом деле, вы не должны создавать дубликаты сообщений. Подождите, пока ваш вопрос будет закрыт как не по теме и перенесен на один из соответствующих сайтов. Спасибо. –

ответ

2

После заявления BACKUP LOG ... у вас есть ключевое слово GO. Это сигнализирует «конец пакета» SQL. Это также означает, что любые переменные, объявленные до GO, не могут быть использованы после GO.

Если вы удаляете ключевое слово GO в своем сценарии (между строками BACKUP LOG ... и declare @backupSetId as int), ваш скрипт должен работать.

Сообщаемая ошибка «близкое ключевое слово» с «», скорее всего, относится к использованию вами @filename в строке RESTORE VERIFYONLY (очевидно) рядом с другим ключевым словом «с».

+0

он работает. Спасибо @RoKa, это прекрасно! –

Смежные вопросы