TSQL: создать представление, которое обращается к нескольким базам данных - PullRequest
29 голосов
/ 27 января 2010

У меня есть особый случай,

например в таблице ta в базе данных A, в ней хранятся все продукты, которые я покупаю

table ta(
id,
name,
price
)

в таблице tb в базе данных B, она содержит все продукты, которые люди могут купить

table tb(
id,
name,
price
....
)

Можно ли создать представление в базе данных A, чтобы просмотреть список всех продуктов, которые я не купил?

Ответы [ 3 ]

42 голосов
/ 27 января 2010

Да, вы можете - синтаксис t-sql такой же, как и при любом другом кросс-вызове базы данных (например, внутри хранимой процедуры).

Для ссылки на ваши таблицы во второй базе данных вам просто нужно:

[DatabaseName]. [Схема]. [TableName]

Таким образом, вы бы получили что-то вроде

CREATE VIEW [dbo].[YourView]
as
select 
a.ID, 
a.SomeInfo, 
b.SomeOtherInfo
from TableInA a
join DatabaseB.dbo.TableInB b
on -- your join logic goes here

Обратите внимание, что это будет работать только на одном сервере - если ваши базы данных находятся на разных серверах, вам потребуется создать связанный сервер.

6 голосов
/ 27 января 2010

Как показывают другие ответы, вы можете использовать нотацию {LINKED_SERVER.} DATABASE.SCHEMA.OBJECT.

Вы также должны знать, что кросс-база данных цепочка владения по умолчанию отключена.

Таким образом, в базе данных предоставление SELECT для представления позволяет пользователю, который может не иметь SELECT для базовых таблиц, по-прежнему выполнять SELECT из представления. Это может не работать для другой базы данных, где у пользователя нет прав доступа к базовой таблице.

5 голосов
/ 27 января 2010

Да, представления могут ссылаться на три части именованных объектов:

create view A.dbo.viewname as
select ... from A.dbo.ta as ta
join B.dbo.tb as tb on ta.id = tb.id
where ...

В будущем будут возникать проблемы с перекрестными запросами в БД из-за непротиворечивости резервного копирования / восстановления, проблем со ссылочной целостностью и, возможно, при отражении отказов, но эти проблемы присущи распределению данных по БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...