特別な場合がありますが、
たとえば、データベースta
のテーブルA
には、購入したすべての製品が格納されます
table ta(
id,
name,
price
)
データベースtb
のテーブルB
には、人々が購入できるすべての製品が含まれています
table tb(
id,
name,
price
....
)
データベースA
にビューを作成して、購入していないすべての製品を一覧表示できますか?
はい、できます-t-sql構文は、他のデータベース間呼び出しと同じです(たとえば、ストアドプロシージャ内)。
2番目のデータベースのテーブルを参照するには、次のものが必要です。
[データベース名]。[スキーマ]。[テーブル名]
だからあなたは次のようなものになるでしょう
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。} DATABASE.SCHEMA.OBJECT表記を使用できます。
また、クロスデータベース 所有権チェーン はデフォルトで無効になっていることにも注意してください。
そのため、データベース内でビューにSELECTを付与すると、基礎となるテーブルにSELECTを持たないユーザーでもビューからSELECTすることができます。これは、ユーザーが基になるテーブルに対するアクセス許可を持たない別のデータベースでは機能しない場合があります。
はい、ビューはオブジェクトという名前の3つの部分を参照できます。
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 ...
バックアップ/復元の一貫性、参照整合性の問題、および場合によってはフェールオーバーのミラーリングが原因で、クロスデータベースクエリで問題が発生しますが、これらの問題はデータが複数のデータベースに分割されることに固有のものです。