Выбор данных из таблицы другой базы на SQL Server

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы сделать запрос к таблице из другой базы данных на SQL Server, применяется трёхкомпонентное наименование: [ИмяБазыДанных].[ИмяСхемы].[ИмяТаблицы]. Например, запрос к таблице Сотрудники в базе данных HR будет примерно таким:

SQL
Скопировать код
SELECT * FROM [HR].[dbo].[Сотрудники];  -- Давайте обратим внимание на 'Сотрудников'!

HR — это название целевой базы данных, dboстандартная схема, а Сотрудники — это название рассматриваемой таблицы.

Кинга Идем в IT: пошаговый план для смены профессии

В подробностях: Навигация по различным базам данных

Работа с множеством баз данных на одном сервере и переход между разными серверами требуется от SQL Server использования различных методов для обеспечения нужной эффективности.

Запрос через сервера с помощью связанных серверов

Для доступа к базам данных, находящимся на различных серверах, нужно установить связанные серверы через sp_addlinkedserver. Это позволяет запросам обращаться к отдаленным ресурсам так, как если бы они были локальными.

SQL
Скопировать код
EXEC sp_addlinkedserver 'TheNeighbourServer';  -- Мы все здесь как соседи.

После установки связанного сервера запросы выполняются так:

SQL
Скопировать код
SELECT * FROM [ДалекийСервер].[ИспользуемаяБД].[Схема].[ЦелеваяТаблица];

Например, так будет выглядеть доступ к таблице "Сотрудники" в базе данных "testdb" на "тестовом сервере" из вашей текущей базы "proddb" на "рабочем сервере":

SQL
Скопировать код
SELECT * FROM [testserver].[testdb].[dbo].[Сотрудники]; -- Вот так мы подключаемся к testserver, там сегодня отличная погода!

Прямые запросы к базе данных в SQL Server 2012+

В версии SQL Server 2012 и новее прямые запросы к таблицам, расположенным в различных базах данных на одном сервере, стали еще проще. Трехкомпонентное имя объекта отлично справляется с этой задачей, и нет необходимости в дополнительной установке связанных серверов:

SQL
Скопировать код
SELECT * FROM [БазаДанныхНаВызов].dbo.[МарафонскаяТаблица];

Вопросы безопасности: Учет баз данных

При выполнении запросов между различными базами данных или серверами важно уделить особое внимание вопросам безопасности для обеспечения конфиденциальности и сохранности данных. Используйте нужные права доступа и принимайте во внимание цепочки владения, чтобы обеспечить сохранность данных.

Визуализация

Предположим, вы обращаетесь к данным таблицы из другой базы данных на SQL Server. Это можно охарактеризовать готовкой на совместном кулинарном мастер-классе, когда вам предстоит использовать продукты со склада:

SQL
Скопировать код
SELECT * FROM ОбщийСклад.[Инвентарь].dbo WHERE типТовара = 'Специи';  -- Пришло время добавить вкуса в ваш запрос!

Иллюстративное представление:

🍲 Следуем новому рецепту
🛒 Берем ингредиенты со склада

Переводим кулинарную метафору в синтаксис SQL:

plaintext
Скопировать код
SELECT инвентарь FROM [ОбъединеннаяКухняСообщества].[Склад].[ПолкАСекцияZ] WHERE типТовара = 'Специи';

Соединив ваши кулинарные навыки с ингредиентами со склада, вы сможете создать истинный кулинарный шедевр.

Масштабируемость: Запросы с связанными серверами

Бывают случаи, когда необходим доступ к удаленному серверу. Но не стоит пугаться, структура запроса изменится незначительно, ничего фантастического.

Настройка связанного сервера:

Прежде всего, задайте учетные данные, а затем настройте связанный сервер:

SQL
Скопировать код
EXEC sp_addlinkedserver   
   @server=N'ПсевдонимСервера',   
   @srvproduct=N'',
   @provider=N'SQLNCLI',   
   @datasrc=N'АдресСервера';  -- Давайте отправимся в живописное путешествие!

Выполнение запроса:

После успешной настройки делайте запросы к таблицам удаленного сервера:

SQL
Скопировать код
SELECT * FROM [ПсевдонимСервера].[МестоположениеБД].[РасположениеСхемы].[АдресТаблицы]

Не забудьте заменить все плейсхолдеры на актуальные значения: ПсевдонимСервера, МестоположениеБД, РасположениеСхемы и АдресТаблицы.

Взаимовыгода — Синонимы для упрощения запросов

В SQL Server синонимы дают вам удобный способ обращения к часто используемым таблицам из других баз данных или серверов. Это все равно, что ввести псевдоним для длинных названий таблиц:

SQL
Скопировать код
CREATE SYNONYM МойСотрудник FOR [ДалекийСервер].[HR].[dbo].[Сотрудники];  -- Позвольте вам представить 'МойСотрудник'

Теперь запросы можно делать еще проще:

SQL
Скопировать код
SELECT * FROM МойСотрудник;  -- 'МойСотрудник' всегда готов помочь вам!

Полезные материалы

  1. Различные способы удаления дубликатов строк из SQL таблицы — давайте вспомним стратегии удаления дубликатов данных в SQL.
  2. php – Redirect to a page does not work if built with variable – Stack Overflow — обсудим проблемы перенаправления в PHP, проанализируем реальные ситуации и предложенные решения.
  3. Использование синонимов в SQL Server для улучшения управляемости — изучим, как упрощать запросы между базами данных с помощью синонимов.
  4. SQL Server: Понимание механизма перекрестной цепочки владения базами данных — подробно разберем, как перекрестная цепочка владения влияет на безопасность в SQL Server.
  5. Понимание "множественного" и "процедурного" подходов в SQL – CodeProject — глубоко погрузимся в основы множественного и процедурного подходов, которые помогают оптимизировать запросы в SQL.