Bir veritabanı projesinde OPENQUERY ile bağlantılı bir sunucu kullanma


10

TFS atmak istiyorum bir veritabanı çalışan bir SQL Server 2008 var. Bu nedenle DB ithal ettiğim bir Visual Studio 2013 veritabanı projesi kullandım. Bir grup hatayı düzelttikten sonra sadece bir hata kaldı:

Bir görünümde OPENQUERYbağlantılı bir sunucuya erişmek için kullanılan geliştiriciler . Bu yüzden doğru veritabanını içeren bir DACPAC'ı içe aktardım Add Database Referenceve aşağıdaki referans seçeneklerini kullanarak projeye ekledim .

Veritabanı Referansı Ayarları

İlk Komut Dosyası Sürümü

Orijinal görünüm oluşturma işleminin daha kısa bir sürümü:

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Bu, aşağıdaki hataya yol açar:

Hata 136 SQL71501: Görünüm: [dbo]. [VwStatus], [LinkedServer] nesnesine çözümlenmemiş bir başvuruya sahip.

İlk girişim

Bu yüzden sunucu adı değişkenini eklemeye çalıştım

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Hangi yol açar

Hata 176 SQL46010: $ (LinkedServer) yakınında yanlış sözdizimi.

Diğer Girişimler

Biraz uğraştım ve aşağıdakileri denedim (alıntılanmış tanımlayıcılar etkinleştirilip etkinleştirilmeden):

FROM       OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([$(LinkedServer)], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([LinkedServer], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY("LinkedServer", 'SELECT * FROM [DB].[dbo].tbStatus') AS 

Her zaman bir hata alıyorum.

Burada göz ardı ettiğim hakkında hiçbir fikrim yok. Yapıyor musun? Zaman ayırdığınız için teşekkürler!

(Ne yazık ki visual-studio-2013 etiketini ekleyemiyorum, bu yüzden visual-studio kullandım)

Yanıtlar:


9

Çalıştırmayı başardım:

Yeni bir veritabanı projesi oluşturdum master. Orada bir klasör Server Objectve bir dosya oluşturdum LinkedServer.sql. SQL dosyasında bağlantılı sunucuyu ekledim:

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';

Veritabanına Project'i masterçözümüme ekledikten ve orijinal veri tabanı projeme yönlendirdikten sonra, ilk sözdizimini kullanarak projeyi oluşturabildim;

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Orada LinkedServers.sql dosyası ile bir ana proje olmasına rağmen hala işe yarayamıyorum
test

Biraz daha bilgi almadan yardım etmek zor. belki başka bir soru sormak daha iyidir. Ana projenize çözümünüzde referans vermek önemlidir. aksi takdirde bu benim için tam olarak tarif edildiği gibi çalıştı.
Chake

Çözümünüz dahilinde - LinkedServer DBA'larıyla bir dacpac (lar )ınız veya projeniz var mı?
Martin Meeser

Merhaba, hatırlayamıyorum ama ikinci paragrafta dacpac kullandığımı yazdım. Ancak son çözüm için ana DB için bir veritabanı projesine başvurdum.
2015 Chake

1
'LinkedServer.sql' dosyanızın derleme eyleminin 'Derleme' olarak ayarlandığından emin olmanız gerekir. Can sıkıcı bir şekilde VS, bir Ön Dağıtım komut dosyasından bağlı sunucuyu tanımıyor gibi görünmüyor ya da tüm bunlar gerekli olmayacaktır.
Taran
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.