Sql server 脚本错误:SQLCMD:关键字';与';

Sql server 脚本错误:SQLCMD:关键字';与';,sql-server,database-backups,sqlcmd,Sql Server,Database Backups,Sqlcmd,当谈到确保备份到位的任务时,我有点担心,因为我们使用的是SQL Express,并且发现没有一种不涉及脚本的方法来管理备份。一般来说,我可以编写脚本,但我对SQL语法有点不熟悉。。。这是我的剧本 declare @currentDate datetime set @currentDate = GetDate() declare @fileName varchar(255) set @fileName = N'C:\Program Files\Microsoft SQL Server\MSSQ

当谈到确保备份到位的任务时,我有点担心,因为我们使用的是SQL Express,并且发现没有一种不涉及脚本的方法来管理备份。一般来说,我可以编写脚本,但我对SQL语法有点不熟悉。。。这是我的剧本

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\u PRD\u Trans\u 20130426\u 0738.TRN

我看到了这个链接: 但是,当我包含
时,我得到了另一个错误紧跟在关键字
之前,带有

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

这个错误让我回到了我最初的想法,即问题在于声明我的变量。

BACKUP LOG…
语句之后,您有一个
GO
关键字。这向SQL发出“批处理结束”的信号。这也意味着,在
GO
之前声明的任何变量都不能在
GO
之后再次使用

如果删除脚本中的
GO
关键字(在
BACKUP LOG…
declare@backupSetId as int
行之间),脚本应该可以工作


报告的错误“靠近关键字'with'”很可能是指您在
RESTORE VERIFYONLY
行中使用了
@filename
(显然)靠近另一个关键字'with'

谢谢,我也把它贴在那里了。当我找到一个答案,我会把它包括在下面的一致性。实际上,你不应该创建重复的职位。只需等到你的问题作为主题关闭并转移到适当的网站之一。谢谢。如果删除
BACKUP…
行和
declare@backupSetId…
line@Randall我认为这是因为只有在同一个Stackexchange站点上创建了另一个问题时,才能将问题作为副本关闭,但是由于您的原始问题是在Stackoverflow上创建的,所以另一个重复问题(现在在DBA.SE上关闭)不能作为重复问题关闭。