在 SQL Server 中,MDF(主数据库文件)包含了数据库的版本信息。如果需要查询 MDF 文件对应的 SQL Server 版本,可以使用 PowerShell 读取文件中的特定字节数据。
1. 使用 PowerShell 查询 MDF 版本
PS > get-content -Encoding Byte "C:\path\to\database.mdf" | select-object -skip 0x12064 -first 2
PS > [int]($_[0] + $_[1] * 256)
注意,复制命令不要复制前面的PS >。
2. 解析数据库版本
上述 PowerShell 命令的逻辑如下:
get-content -Encoding Byte "C:\path\to\database.mdf"以字节形式读取 MDF 文件。select-object -skip 0x12064 -first 2跳过前0x12064个字节,并获取接下来的 2 个字节(这两个字节存储了 SQL Server 版本信息)。$_[0] + $_[1] * 256计算版本号。
例如,我们执行下面的命令:
get-content -Encoding Byte "d:/B2B.mdf" | select-object -skip 0x12064 -first 2
命令返回:
149
2
那么,我们用149+2*256来计算版本号,得到结果是661,然后到下表里面去查找即可。
如果不想手动计算,也可以使用下面的三行命令,让程序自动计算版本号:
PS > $bytes = Get-Content -Encoding Byte "d:/B2B.mdf" | Select-Object -Skip 0x12064 -First 2
PS > $version = $bytes[0] + ($bytes[1] * 256)
PS > $version
3. 版本号对照表
计算出的整数版本号可以对照以下 SQL Server 版本表:
| 版本号 | SQL Server 版本 |
|---|---|
| 515 | SQL Server 7.0 |
| 539 | SQL Server 2000 |
| 611 | SQL Server 2005 |
| 655 | SQL Server 2008 |
| 661 | SQL Server 2008 R2 |
| 706 | SQL Server 2012 |
| 782 | SQL Server 2014 |
| 852 | SQL Server 2016 |
| 869 | SQL Server 2017 |
| 904 | SQL Server 2019 |
| 921 | SQL Server 2022 |
4. 结论
通过 PowerShell 读取 MDF 文件的特定字节,我们可以快速确定数据库版本,无需启动 SQL Server 实例。此方法适用于数据库管理员或运维人员排查数据库兼容性问题。