MongoDb ODBC 驱动程序 - > SQL Server 链接服务器查询失败



我安装了MongoDb 3.4,并尝试使用链接服务器从SQL Server 2019开发版获取其数据。

我设法安装了MongoDb ODBC驱动程序和MongoDB Connector for BI 2.13,并将其连接到SQL Server。

链接服务器的查询通过像这样的 openquery 工作正常:

select * 
from openquery([MONGOtst],  'select active,created_at,city,CAST(total_xp AS integer) from content.users' )

问题是:

  1. 为什么当我尝试这个时它会失败

    select 
    active, created_at, city, xp, status, last_action_at,
    cast(total_xp AS integer) 
    from MONGOtst.content.users
    

    使用味精:

    无效的对象名称"MONGOtst.content.users">

    我尝试了不同的方法MONGOtst...usersMONGOtst..usersMONGOtst..content.users等,但都失败了

  2. 上一个查询中的total_xp不能按原样使用(可能是BSON.Decimal128(与 msg

    链接服务器"MONGOtst"的 OLE DB 提供程序"MSDASQL"为列"total_xp"提供了无效的元数据。精度超过了允许的最大值。

    我没有找到任何选项来限制驱动程序选项中的BSON.Decimal128数字精度,例如 VARCHAR: --maxVarcharLength 8000

  1. 如果你通过SQLServer查询mongotst,你需要对针对mongotst运行的每个查询使用OPENQUERY。或者,您可以将查询插入到临时表中,然后仅从临时表中查询。

    选择* 成 #M 来自 openquery([MONGOtst], 'select active,created_at,city,cast(total_xp AS 十进制(#,#( 从 内容用户' (

我对MongoDB不太熟悉,但我不相信你可以改变ODBC驱动程序的精度。欢迎有人纠正我,但 ODBC 驱动程序只是建立连接并投影数据。不在连接之间转换任何数据。

  1. 我怀疑使用整数作为数据类型是您的问题之一,因为您正在从十进制数据类型转换。无论是十进制、数字还是 Varchar 都应该适合你。我更喜欢在原始查询而不是子查询中转换数据类型,但两者都应该有效。此外,选择最适合您的数据的数据类型。

    选择 CAST(total_xp 作为 varchar(###(( 作为 MTotal_xp, * 成 #M from openquery([MONGOtst], 'select active,created_at,city,total_xp from 内容用户' (

我相信还有其他方法可以解决这个问题。上周我在类似的查询中遇到了一些问题,这对我有用。

  1. 它的工作原理:select * from MONGOtst...users执行从另一个主题复制的步骤后:

在这里找到答案。现在我可以查询三点表示法了。谢谢

http://www.sparkalyn.com/2008/12/invalid-schema-error/

转到提供程序选项屏幕 在 SQL Server 中,您可以看到列表 链接服务器上方文件夹中的提供程序数量(假设您有 适当的权限(。右键单击 MSDASQL 并转到属性。 在 SQL Server 中,提供程序选项按钮位于对话框中,其中 创建链接服务器。选中显示"零级"的框 只有">

  1. 更新字段描述"十进制"->"float64"后也可以工作

最新更新