Sql server 脚本错误:SQLCMD:关键字';与';
当谈到确保备份到位的任务时,我有点担心,因为我们使用的是SQL Express,并且发现没有一种不涉及脚本的方法来管理备份。一般来说,我可以编写脚本,但我对SQL语法有点不熟悉。。。这是我的剧本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
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上关闭)不能作为重复问题关闭。