我想编写一个自动化脚本,从其备份文件中恢复 SQL Server DB。但是,这样做在 SQL 中并不是一个简单的过程,因为主查询需要额外的输入,而这些输入实际上可以使用另一个查询获得。我可以在一个查询中执行此操作吗?
SO上有一个问题;但解决方案不是很灵活。RESTORE FILELISTONLY
的定义变化非常频繁。即便如此,该解决方案似乎也非常冗长。
没有更简单的方法将查询结果存储到变量中并使用它们吗?这是任何编程语言的小菜一碟。
获取逻辑名称:
RESTORE FILELISTONLY FROM DISK = 'D:SourceBackUpFile.bak' GO
恢复数据库:
RESTORE DATABASE DBName FROM DISK = 'D:SourceBackUpFile.bak' WITH RECOVERY MOVE 'SourceMDFLogicalName' TO 'D:TargetMDFFile.mdf', MOVE 'SourceLDFLogicalName' TO 'D:TargetLDFFile.ldf'
取自这个 SO question。这似乎适用于 2019 年之前的所有版本,包括 2019 年。
请注意,自 SQL 2000 以来,该定义已更改了两次——我个人认为 19 年中的两次更改并不属于频繁更改。从这个意义上说,只要您使用像下面这样的通用脚本,我就不会担心使用 RESTORE FILELISTONLY。
我在SQLServerScience.com上写了一篇博文,展示了如何获取您所追求的详细信息,并且与自 2008 年以来的所有 SQL Server 版本兼容
这是该博客文章的主要代码:
生成的
RESTORE DATABASE
命令如下所示:此代码还在 Linux 版本的 SQL Server 2017 上进行了测试。
您问:
这里的要求不是向变量添加值。我们需要将一组不同数据的内容提取到一个表中。它在概念上可能类似于从对象加载数组。但是,在 SQL Server 中,您可以像命令一样存储命令输出结果的唯一方法
RESTORE HEADERONLY
是首先将其插入表中,然后从所需表中获取特定值。为什么不使用免费提供的dbatools或sp_restoregene?
他们都可以做你所追求的。