4

我是新手T-SQL,我正在尝试备份我的数据库(使用 SQL Server 2008)。

当我尝试通过运行脚本时sqlcmd -i inputfile收到以下错误消息: 'DATE' Scripting variable not defined.

问题是我有这样一行: ... TO DISK = "FileName_$(ESCAPE_NONE(DATE)).BAK"...文件名中有日期,它将阻止它替换我的旧备份。

如果我在管理工作室中运行它,它可以工作,但如果我在命令行中使用sqlcmd -i命令运行它,那么它就不起作用。

编辑:

我查看了工作历史记录,并看到了以下错误消息:

“对于 SQL Server 2005 SP1 或更高版本,您必须使用适当的 ESCAPE_xxx 宏来更新包含令牌的作业步骤,然后才能运行作业”

我不太明白那是什么意思。我已经用过$ESCAPE_NONE(DATE)了,怎么了?

4

3 回答 3

2

我知道的老问题,但这是第一个结果之一,如果其他人有同样的问题,答案并不是特别容易找到。

包括 -x 开关来禁用环境变量为我解决了这个问题;

sqlcmd -x -i inputfile
于 2014-12-24T11:27:29.577 回答
0

如果您尝试备份您的 sql server 数据库并使用 sqlcmd 将日期附加到它们,那么您可以尝试一个简单的方法。

首先,创建名为 sp_BackupDabases 的 sp,您可以在此处找到它:http: //support.microsoft.com/kb/2019698

您可以使用以下命令从 sql cmd 调用它:

sqlcmd -U Damieh -P ilovechocolate -S (local) -Q "EXEC sp_BackupDatabases  @backupLocation ='C:\MyBackups\', @BackupType='F'"

我确定您已经知道这一点,但以防万一:-U 是用户,-P 是密码,-S 是服务器,-Q 是查询。您可以备份所有数据库或其中一些数据库,有一些参数。您可以在我给您的同一链接上找到存储的 proc 参数详细信息。

日期将自动附加,如果您希望使用不同的位置/方式/格式,您可以使用 sp 的代码。我经常在没有非 express sqlserver 的服务器上使用它(这意味着我无法在不使用 .bat 和任务调度程序的情况下安排备份)并取得了巨大的成功。

如果这不是您正在寻找的答案,我深表歉意 =)。祝你今天过得愉快!

于 2012-10-18T03:04:07.640 回答
0

我知道我在这个线程上迟到了,但你可以使用以下内容:

SQLCMD -S YourServer -E -d YourDatabase -i YourScript 2> nul

这会将 StdErrorOut 发送到位桶。

于 2020-05-18T15:21:48.120 回答