Openquery ms sql: Запрашивание удаленных серверов (ядро СУБД) — SQL Server
Содержание
сервер sql — T-SQL Openquery — ошибка из-за пробела в имени таблицы
У меня есть запрос ниже, который пытается вытащить данные из базы данных Sage 50 pervasive 13 на сервер SQL с использованием сервера ссылок. Мне удалось вытащить все данные из всех таблиц в SQL Server, кроме этой таблицы, потому что в имени таблицы есть пробел.
У меня ничего не получилось с тем, что я изменил. Может ли кто-нибудь помочь мне заставить этот запрос работать?
выбрать * из openquery(ARKSAGE, 'выберите * из NEPHROPATHOLOGYASSO1.Budget Details')
Когда я изменяю приведенный выше запрос на этот:
выберите * из openquery(ARKSAGE,'выберите * из NEPHROPATHOLOGYASSO1.[Детали бюджета]')
Я получаю это сообщение об ошибке:
Поставщик OLE DB «MSDASQL» для связанного сервера «ARKSAGE» вернул сообщение «[PSQL][клиентский интерфейс ODBC][LNA][PSQL][SQL Engine]Синтаксическая ошибка: выберите * из NEPHROPATHOLOGYASSO1.<< ??? >>[Сведения о бюджете]».
Сообщение 7321, уровень 16, состояние 2, строка 61
Произошла ошибка при подготовке запроса «выберите * из NEPHROPATHOLOGYASSO1.[Сведения о бюджете]» для выполнения с поставщиком OLE DB «MSDASQL» для связанного сервера «ARKSAGE».
- sql-сервер
- открытый запрос
3
PSQL
в сообщении об ошибке говорит мне, что на связанном сервере, вероятно, работает Postgresql, а не SQL Server. Postgresql помечает имена объектов двойными кавычками вместо квадратных скобок. Поэтому вы должны попробовать это:
выберите * из openquery(ARKSAGE,'выберите * из NEPHROPATHOLOGYASSO1."Детали бюджета"')
Кроме того, я не уверен, что << ??? >> Текст
предназначен для, но похоже, что он жалуется на нечетный символ юникода где-то там. Так что ищите невидимые пробелы. Или, может быть, это просто часть того, как сообщение об ошибке форматируется в контексте связанного сервера Postgresql.
2
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
openquery — Microsoft SQL Server — открытый запрос, где > дата
спросил
Изменено
6 лет, 4 месяца назад
Просмотрено
7к раз
Я пытаюсь выполнить выборку с использованием openquery
с фильтрацией результатов по дате, но у меня проблема с использованием даты после предложения where.
В идеале я хотел бы иметь возможность передавать переменную
set @d = dateadd(day, -30, getdate())
, но для примера попробую использовать указанную дату:
Пример:
выбрать * from OPENQUERY([Linked_Server], 'выберите идентификатор, имя из пользователей, где LastModifiedDate > ''2017-01-01''')
Это возвращает ошибку:
INVALID_FIELD:
выберите идентификатор, имя из пользователей, где LastModifiedDate > ‘2017-01-01’
значение критерия фильтра для поля ‘LastModifiedDate’ должно иметь тип dateTime и не должно быть заключено в кавычки».
Все работает нормально, если я использую, например, istrue = true
, но сравнение дат кажется проблемой.
Может ли кто-нибудь посоветовать мне по этому поводу?
- sql-сервер
- открытый запрос
0
Похоже, вы запрашиваете связанный сервер, который не является стандартным SQL Server, а представляет собой Salesforce, использующую SOQL, который имеет определенный формат для литералов даты и даты и времени. Правильный формат фильтров даты в Salesforce:
WHERE LastModifiedDate > 2017-01-01T00:00:00Z
Таким образом, ваш полный SQL должен быть:
SELECT * ОТ ОТКРЫТОГО ЗАПРОСА( [Связанный_сервер], 'ВЫБЕРИТЕ идентификатор, имя ОТ пользователей, ГДЕ LastModifiedDate > 2017-01-01T00:00:00Z')
1
МЫ используем здесь много открытых запросов и столкнулись с таким сценарием. В прошлом мы делали следующее:
CONVERT(VARCHAR(11),@d,101)
ИЛИ
ПРЕОБРАЗОВАТЬ(VARCHAR(25),@d,126)
Это уже преобразует дату в формат, размещенный там DavidG.
Кроме того, чтобы еще раз проверить правильность вывода запроса, мы назначаем текст запроса переменной, а затем используем печать для отображения переменной, которая представляет собой простой текст, который будет отображаться на вкладке «Сообщение» рядом с вкладкой набора результатов. Пока предложение Where отображается только с двумя одинарными кавычками, запрос, который у вас есть, должен работать, на всякий случай скопируйте сообщение и запустите его отдельно, заменив все двойные одинарные кавычки только одной одинарной цитатой.
То, что у меня было на вкладке сообщения в предложении WHERE, было примерно таким:
ГДЕ эта дата МЕЖДУ ''27.02.2017'' И ''2017-02-27T23:59:59.990''
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.