在 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 实例。此方法适用于数据库管理员或运维人员排查数据库兼容性问题。
发表回复