我安装了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' )
问题是:
为什么当我尝试这个时它会失败
select active, created_at, city, xp, status, last_action_at, cast(total_xp AS integer) from MONGOtst.content.users
使用味精:
无效的对象名称"MONGOtst.content.users">
我尝试了不同的方法
MONGOtst...users
,MONGOtst..users
,MONGOtst..content.users
等,但都失败了上一个查询中的
total_xp
不能按原样使用(可能是BSON.Decimal128
(与 msg链接服务器"MONGOtst"的 OLE DB 提供程序"MSDASQL"为列"total_xp"提供了无效的元数据。精度超过了允许的最大值。
我没有找到任何选项来限制驱动程序选项中的
BSON.Decimal128
数字精度,例如 VARCHAR: --maxVarcharLength 8000
-
如果你通过SQLServer查询mongotst,你需要对针对mongotst运行的每个查询使用OPENQUERY。或者,您可以将查询插入到临时表中,然后仅从临时表中查询。
选择* 成 #M 来自 openquery([MONGOtst], 'select active,created_at,city,cast(total_xp AS 十进制(#,#( 从 内容用户' (
我对MongoDB不太熟悉,但我不相信你可以改变ODBC驱动程序的精度。欢迎有人纠正我,但 ODBC 驱动程序只是建立连接并投影数据。不在连接之间转换任何数据。
-
我怀疑使用整数作为数据类型是您的问题之一,因为您正在从十进制数据类型转换。无论是十进制、数字还是 Varchar 都应该适合你。我更喜欢在原始查询而不是子查询中转换数据类型,但两者都应该有效。此外,选择最适合您的数据的数据类型。
选择 CAST(total_xp 作为 varchar(###(( 作为 MTotal_xp, * 成 #M from openquery([MONGOtst], 'select active,created_at,city,total_xp from 内容用户' (
我相信还有其他方法可以解决这个问题。上周我在类似的查询中遇到了一些问题,这对我有用。
- 它的工作原理:
select * from MONGOtst...users
执行从另一个主题复制的步骤后:
在这里找到答案。现在我可以查询三点表示法了。谢谢
http://www.sparkalyn.com/2008/12/invalid-schema-error/
转到提供程序选项屏幕 在 SQL Server 中,您可以看到列表 链接服务器上方文件夹中的提供程序数量(假设您有 适当的权限(。右键单击 MSDASQL 并转到属性。 在 SQL Server 中,提供程序选项按钮位于对话框中,其中 创建链接服务器。选中显示"零级"的框 只有">
- 更新字段描述"十进制"->"float64"后也可以工作