У меня есть особый случай,
например, в таблице ta
в базе данных A
, это хранит все продукты, которые я покупаю
table ta(
id,
name,
price
)
в таблице tb
в базе данных B
, именно весь продукт люди может купить
table tb(
id,
name,
price
....
)
Я могу создать представление в базе данных A
перечислять все продукты, которые я не купил?
Да, можно - синтаксис 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
Обратите внимание, что это будет работать только на одном сервере - если ваши базы данных находятся на разных серверах, вам нужно будет создать связанный с ними сервер.
Как указывают на другие ответы, вы можете использовать базу данных {linked_server.} Matabase.schema.Object.
Вы также должны знать, что Cross-Database цепочки владения по умолчанию отключен.
Итак, в базе данных, предоставление выбора на представлении позволяет пользователю, который не может выбрать в основных таблицах, чтобы все еще выбирал с вида. Это может не работать в другой базе данных, где у пользователя нет разрешений на базовую таблицу.
Да, просмотры могут ссылаться на три части именованные объекты:
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 ...
возникнут проблемы с дороги с пересеченными запросами БД из-за консистенции резервного копирования / восстановления, а также отказоустойчивости, но, возможно, Эти проблемы присущи будут разделены данные через DBS.