使用Firebird ODBC驱动链接SSMS至Firebird时遇元数据不一致问题
问题场景
已通过Firebird 3.3 ODBC驱动创建ODBC数据源,将默认凭据(SYSDBA/masterkey)的Firebird 3.0.9空白数据库添加为SQL Server链接服务器(名称TEST),执行查询语句SELECT * FROM [TEST]...[RDB$DATABASE]时触发以下错误:
Message 7356, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' for linked server 'TEST' provided inconsistent metadata for a column. The RDB$SECURITY_CLASS column (compile-time ordinal 3) of the RDB$DATABASE object reported a LENGTH value of 9 at compile time and 31 at run time
重要说明:OPENQUERY同样无法使用,且需直接通过链接服务器执行查询,不接受OPENQUERY方案。
解决方法
- 调整ODBC数据源元数据配置:打开Firebird ODBC数据源的设置界面,找到Metadata相关配置项,将
VARCHAR default length从默认的9修改为31;或者勾选Use default varchar length from database选项,让驱动直接从数据库读取字段的真实长度元数据。 - 修改链接服务器OLE DB属性:在SQL Server Management Studio中,进入链接服务器
TEST的属性,找到MSDASQL提供程序的设置,启用Allow inprocess选项,同时取消勾选Level zero only,避免元数据读取的限制。 - 避免使用
SELECT *,显式指定字段:查询时明确列出需要的字段,跳过触发错误的RDB$SECURITY_CLASS字段(如果业务不需要),例如执行:SELECT RDB$DATABASE_NAME, RDB$CHARACTER_SET_NAME FROM [TEST]...[RDB$DATABASE] - 升级Firebird ODBC驱动:尝试更新到最新版本的Firebird ODBC驱动,新版本通常会修复这类跨数据库的元数据兼容性问题。
内容的提问来源于stack exchange,提问作者Marcel Lorenz
相关产品推荐
相关产品推荐

