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

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.