SQLCMD Restore 没有恢复所有存储过程

SQLCMD Restore is not restoring all sprocs

作为程序安装的一部分,我正在使用以下命令来恢复数据库。

SqlCmd -S .\<SqlInstance> -h -1 -U <username> -P <password> -Q "RESTORE DATABASE <Database> FROM DISK=<FilePath>"

当我运行这个命令时,数据库恢复成功,但是有一个存储过程不存在。但是,当我使用相同的文件并通过 SSMS 恢复数据库时,存储过程确实存在并且数据库恢复正确。这是两种恢复数据库的方法之间的唯一区别,我无法手动管理每个安装,因为这将安装到 300 多台机器上。

如果我可以提供任何其他信息以进行澄清,我很乐意提供。

编辑:

根据评论,我发现正在执行 T-SQL 命令

USE [master]
RESTORE DATABASE [ErplyAnalysis] FROM  DISK = N'<FilePath>' WITH  FILE = 2,  NOUNLOAD,  STATS = 5

GO

您在不同的命令中恢复不同的备份集。如果我们只看您的 2 条陈述:

RESTORE DATABASE <Database> FROM DISK=<FilePath>

然后在 SSMS 中:

RESTORE DATABASE [ErplyAnalysis] FROM  DISK = N'<FilePath>' WITH  FILE = 2,  NOUNLOAD,  STATS = 

在 SSMS 中通知您 FILE = 2

默认情况下,如果 FILE 被省略,那么它将使用其默认值 1(参见 RESTORE Arguments (Transact-SQL))。因此,在 sqlcmd 中,您正在恢复旧版本的数据库。

您有 2 组,因为您在创建备份时没有重新初始化备份。这不是问题,但这意味着您需要确保检查需要为 FILE 传递哪个值是您正在使用备份集。