2010-01-26 19 views

cevap

35

Evet yapabilirsiniz - T-SQL sözdizimi (örneğin, bir depolanmış prosedür içinde) diğer herhangi bir çapraz veritabanı arama içinde aynıdır.

ikinci veritabanında tabloları başvuru için sadece gerekir:..

[VeritabanıAdı] [Şema] [TabloAdı]

Yani

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 

gibi bir şey ile sona ereceğini Bunun sadece aynı sunucuda çalışacağını unutmayın - veritabanlarınız farklı sunuculardaysa, bağlantılı bir sunucu oluşturmanız gerekir.

+0

.. Denememe edelim. – jojo

+1

Buna benzer bir şey yaptığımı eklemek isterim. Ancak, görünümü oluşturmak için hangi veritabanının adını belirtmek istiyorsanız, size GÖRÜNÜM abc.dbo.YourView' CREATE 'kullanamazsınız unutulmamalıdır. Bunun yerine, "USE abc" yi çalıştırmanız ve daha sonra "CREATE VIEW dbo.YourView" komutunu çalıştırmanız gerekir, aksi halde bir hata alırsınız. –

5

Evet, görünümler üç kısım adlandırılmış nesneleri başvurabilirsiniz: çünkü yedekleme çapraz db sorgu ile yolda

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 ... 

olacaktır sorunları/tutarlılık, bilgi tutarlılığı sorunları ve muhtemelen mirorring yerine çalışma, ancak bu sorunları geri Verilerin dbs'ye bölünmesi doğaldır. Diğer cevaplar belirtmek üzere

3

, sen {linked_server.} DATABASE.SCHEMA.OBJECT biçimi kullanabilirsiniz.

Ayrıca veritabanları arası ownership chaining varsayılan olarak devre dışıdır bilmelidir.

Dolayısıyla, bir veritabanında, bir görünümde SELECT'i atamak, temel tablolarda SELECT'e sahip olmayan bir kullanıcının görüntüden hala SEÇİM yapmasına izin verir. Bu, kullanıcının temel tablodaki izinlere sahip olmadığı başka bir veritabanında çalışmayabilir. Benim veritabanı aynı sunucuda bulunan yes..all

+0

Yep. Görünüme erişen SQL kullanıcısı, başvurulan herhangi bir veritabanı için okuma izinlerine sahip olmalıdır. – Jecoms

İlgili konular