2013-04-26 171 views
0

當它來與確保備份越來越任務到位,我還是有點擔心,因爲我們使用的是SQL Express和發現,是不是真的有一種無需參與腳本管理的方法。一般來說,我對腳本沒問題,但是對於SQL語法,我有點不太流行......這是我的腳本。腳本錯誤:SQLCMD:「與」關鍵字附近有語法錯誤

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". 

和錯誤把我帶回到我最初的想法是個Ë問題是與我的聲明變量..

+0

屬於上http://dba.stackexchange.com – 2013-04-26 12:08:35

+0

謝謝,我張貼有作爲。當我找到答案時,我會在下面列出它以保持一致。 – 2013-04-26 12:45:54

+0

其實,你不應該創建重複的帖子。只要等到你的問題關閉,並且轉移到適當的網站之一。謝謝。 – 2013-04-26 12:47:56

回答

2

BACKUP LOG ...語句後,你有一個GO關鍵字。這表示「批量結束」爲SQL。這也意味着,在GO之前聲明的變量不能再GO後使用。

如果您刪除腳本中的GO關鍵字(在BACKUP LOG ...declare @backupSetId as int之間),則腳本應該可以工作。

報告錯誤「near keyword」與「」很可能是指您在RESTORE VERIFYONLY行(顯然)在另一個關鍵字'with'附近使用@filename

+0

它的工作原理。感謝@RoKa,這非常完美! – 2013-04-26 13:02:02

相關問題