有没有办法确定用于创建 MDF 或 BAK 文件的 SQL Server 版本?

Ben*_*ack 19 sql-server

我有一个存储为 MDF 文件的 SQL Server DB 的本地副本。有没有办法告诉您使用哪个版本的 SQL Server 创建该文件?

db2*_*db2 22

使用 RESTORE HEADERONLY,例如

RESTORE HEADERONLY FROM DISK = 'D:\whatever.bak'
Run Code Online (Sandbox Code Playgroud)

您将获得很多列,但感兴趣的是 SoftwareVersionMajor、SoftwareVersionMinor 和 SoftwareVersionBuild,它们应该为您提供 SQL Server 的版本号。例如,在我们的系统上,它们是 10、0 和 4000,即 10.0.4000 (2008 SP2)。

不确定如果您尝试使用太旧而无法在服务器运行的版本上恢复的备份来执行此操作会发生什么 - 您可能只会收到错误而没有信息(尽管这本身至少会提供一些线索它来自的版本)。


Rem*_*anu 8

您可以通过查看偏移量 0x12064 处的两个字节来确定数据库的主 MDF 文件的版本。请参见如何确定 MDF 文件的数据库版本

.bak文件中,低字节是 0xEAC,高字节是 0xEAD。

您可以在此处找到 MS SQL 的大多数内部数据库版本号。


小智 6

对于 MDF 文件,试试这个命令:

dbcc checkprimaryfile ('c:\MyApp\AppData\foo.mdf', 2)
Run Code Online (Sandbox Code Playgroud)

它将输出 3 个具有值的属性:Database name,Database versionCollation

语法如下(该命令未记录,因此这里有更多信息):

DBCC CHECKPRIMARYFILE ({'FileName'} [, opt = {0|1|2|3}])

FileName 只不过是 SQL Server 数据库主数据文件 .mdf 文件的实际路径。

Opt = 0 - 验证文件是否为 SQL Server 数据库主数据文件 (.mdf)。

Opt = 1 - 返回与数据库关联的所有文件的数据库名称、大小、最大大小、增长、状态和路径。

Opt = 2 - 返回数据库名称、版本和排序规则信息。

Opt = 3 - 返回与数据库关联的所有文件的名称、状态和路径。