Подтвердить что ты не робот

Пример запроса сервера SQL Server

В Management Studio я пытаюсь запустить запрос/выполнить соединение между двумя связанными серверами. Является ли это правильным синтаксисом с использованием связанных серверов db:

select foo.id 
from databaseserver1.db1.table1 foo, 
     databaseserver2.db1.table1 bar 
where foo.name=bar.name

В принципе, вы просто предисловие имени сервера db к db.table?

4b9b3361

Ответ 1

Формат должен быть:

<server>.<database>.<schema>.<table>

Например: DatabaseServer1.db1.dbo.table1


Обновление. Я знаю, что это старый вопрос, и ответ, который у меня есть, правильный; однако, я думаю, что кто-то другой наткнулся на это, должен знать несколько вещей.

А именно, при запросе на связанный сервер в ситуации объединения таблица ENTIRE от связанного сервера, скорее всего, будет загружена на сервер, из которого выполняется запрос, чтобы выполнить операцию соединения. В случае OP оба table1 из DB1 и table1 из DB2 будут переданы полностью на сервер, выполняющий запрос, предположительно названный DB3.

Если у вас большие таблицы, это может привести к операции, для выполнения которой требуется много времени. В конце концов, теперь она ограничена скоростью сетевого трафика, которая на несколько порядков медленнее, чем память или даже скорость передачи диска.

Если возможно, выполните один запрос с удаленным сервером, не подключаясь к локальной таблице, чтобы вытащить нужные данные в временную таблицу. Тогда запросите это.

Это не возможно, тогда вам нужно посмотреть на различные вещи, которые заставили бы SQL-сервер загружать всю таблицу локально. Например, используя GETDATE() или даже определенные объединения. Другие убийцы производительности включают в себя не предоставление соответствующих прав.

Для получения дополнительной информации см. http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/.

Ответ 2

SELECT * FROM OPENQUERY([SERVER_NAME], 'SELECT * FROM DATABASE_NAME..TABLENAME')

Это может вам помочь.

Ответ 3

Если вы все еще находите проблему с <server>.<database>.<schema>.<table>

Включите имя сервера в []

Ответ 4

Вам нужно указать схему/владельца (dbo по умолчанию) как часть ссылки. Кроме того, было бы предпочтительнее использовать новый стиль соединения (ANSI-92).

select foo.id 
    from databaseserver1.db1.dbo.table1 foo
        inner join databaseserver2.db1.dbo.table1 bar 
            on foo.name = bar.name

Ответ 5

Для тех, у кого проблемы с этими другими ответами, попробуйте OPENQUERY

Пример:

 SELECT * FROM OPENQUERY([LinkedServer], 'select * from [DBName].[schema].[tablename]') 

Ответ 6

select * from [Server].[database].[schema].[tablename] 

Это правильный способ вызова. Обязательно убедитесь, что серверы связаны перед выполнением запроса!

Чтобы проверить, связаны ли связанные серверы:

EXEC sys.sp_linkedservers 

Ответ 7

Обычно прямые запросы не должны использоваться в случае связанного сервера, поскольку он сильно использует временную базу данных SQL-сервера. На первом этапе данные извлекаются во временную БД, затем происходит фильтрация. Об этом очень много. Лучше использовать открытый OPENQUERY, потому что он передает SQL на исходный связанный сервер, а затем возвращает результаты фильтрации, например.

SELECT *
FROM OPENQUERY(Linked_Server_Name , 'select * from TableName where ID = 500')

Ответ 8

select name from drsql01.test.dbo.employee
  • drslq01 - это сервер --linked
  • test - это имя базы данных
  • dbo is schema -default схема
  • сотрудник имя таблицы

Я надеюсь, что это помогает понять, как выполнить запрос для связанного сервера

Ответ 9

Следующий запрос лучше всего работает.

Попробуйте этот запрос:

SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')

Это очень помогает связать MySQL с MS SQL

Ответ 10

Для чего это стоит, я нашел следующий синтаксис для работы наилучшим образом:

SELECT * FROM [LINKED_SERVER]... [TABLE]

Я не мог заставить рекомендации других работать, используя имя базы данных. Кроме того, этот источник данных не имеет схемы.

Ответ 11

щелкните правой кнопкой мыши по таблице и выберите таблицу сценариев, как выбрать

enter image description here