我们正在使用Simba Mongo ODBC驱动程序连接到Mongo数据库并进行SQL查询。我使用isql在Linux上测试了连接,并且能够执行查询。
当我的客户端尝试通过Microsoft SQL Server Management Studio连接到Mongo时,他收到以下错误:
OLE DB provider 'MSDASQL' for linked server 'mongo' returned data that does not match
expected data length for column '[MSDASQL].contributorComposite__0__biographicalNote'.
The (maximum) expected data length is 255, while the returned data length is 290.
我从未使用过此应用程序。你知道我在哪里可以控制预期的数据长度吗?
答案 0 :(得分:4)
链接服务器对元数据和返回的数据非常挑剔,一般来说,如果您定义的元数据与使用它时的预期元数据不完全匹配,那么您更有可能遇到问题。应用
在这种情况下发生的事情是您正在检索定义了字符串列的数据。字符串列中的数据长度为290,但驱动程序报告的长度为255.这是因为MongoDB没有返回任何特定字段长度的元数据,因为它是无模式数据源。驱动程序使用默认值来报告字符串列的长度,默认情况下设置为255.您可以通过打开DSN的配置对话框,转到高级选项以及将标准字符串列长度从255更改为更改此值更大的东西,比如512.这应该允许Linked Server正常运行,除非你的数据超过512字节,在这种情况下你应该简单地将它调整到一个更大的适当值。
答案 1 :(得分:0)
我找到了这个答案here:解决此问题的一种方法是构造您的SQL语句,例如:
declare @myStmt varchar(max)
set @myStmt = 'select * from my_collection'
EXECUTE (@myStmt) AT MongoDB_PROD_mydb
我确实在链接的SQLite服务器上尝试了它,但是它起作用了,但是奇怪的是,在较长的条目上,文本会随机地被截断。我还没有弄清楚这部分-它可能与我使用的SQLiteODBC驱动程序有关。
但是处理了“预期数据长度”错误。
迈克尔