Драйвер MongoDb ODB C -> SQL Сбой запроса связанного с сервером сервера - PullRequest
0 голосов
/ 11 февраля 2020

У меня установлен MongoDb 3.4 и я пытаюсь получить данные с SQL Server 2019 dev. издание с использованием связанного сервера.

Мне удалось установить драйвер MongoDb ODB C и MongoDB Connector для BI 2.13 и подключить его к SQL Серверу.

Запрос связанного сервера работает нормально через 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
    

    с msg:

    Неверное имя объекта 'MONGOtst.content.users'

    Я пробовал разные способы MONGOtst...users, MONGOtst..users, MONGOtst..content.users et c. но все они терпят неудачу

  2. total_xp в пред. запрос не может быть использован как есть в запросе (возможно, как BSON.Decimal128) с msg

    Поставщик OLE DB "MSDA SQL" для связанного сервера "MONGOtst" предоставил недопустимые метаданные для столбец "total_xp". Точность превысила допустимый максимум.

    , и я не нашел никакой возможности ограничить точность чисел BSON.Decimal128 в параметрах драйвера, как, например, в. VARCHAR: - maxVarcharLength 8000

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020
  1. работает: select * from MONGOtst...users после выполнения шагов, скопированных из другой топи c:

Найден ответ здесь. Теперь я могу запрос трехточечной нотации. Спасибо

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

Go экрану настроек провайдера. На SQL сервере вы можете увидеть список провайдеров в папке над связанным сервером ( при условии, что у вас есть соответствующие разрешения). Щелкните правой кнопкой мыши на MSDA SQL и go для свойств. В SQL Server кнопка параметров поставщика находится в диалоговом окне, в котором вы создаете связанный сервер. Установите флажок «Только нулевой уровень»

также работает после обновления описания поля 'decimal' -> 'float64'
0 голосов
/ 11 февраля 2020
  1. Если вы запрашиваете mongotst через SQLServer, вам нужно будет использовать OPENQUERY для каждого запроса, который вы запускаете для mongotst. Кроме того, вы можете вставить запрос во временную таблицу, а затем просто запросить ее из временной таблицы.

    выберите * в #M из открытого запроса ([MONGOtst], 'выберите активный, созданный_ат, город, приведение (total_xp AS Decimal (#, #) из content.users')

Я не слишком знаком с MongoDB, но я не верю, что вы можете изменить точность на вашем драйвере ODB C. Кто-то может поправить меня, но драйвер ODB C просто устанавливает соединение и проецирование данных. Не преобразует данные между соединениями.

У меня есть подозрение на использование Integer, поскольку ваш тип данных является одной из ваших проблем, поскольку вы конвертируете из типа данных Decimal. Либо Десятичное число, Numeri c, либо Varchar должны работать для вас. Я предпочитаю преобразовывать тип данных в исходный запрос, а не в подзапрос, но любой из них должен работать. Также выберите тип данных, который лучше всего подойдет для ваших данных.

Выберите CAST (total_xp как varchar (###)) в качестве MTotal_xp, * в #M из открытого запроса ([MONGOtst], выберите активный, создан_ат, город , total_xp от content.users ')

Я уверен, что есть и другие способы go об этом. На прошлой неделе у меня возникли проблемы с аналогичным запросом, и это сработало для меня.

...