Korzystanie z serwera połączonego z OPENQUERY w projekcie bazy danych

10

Mam SQL Server 2008 z bazą danych, którą chcę wrzucić do TFS. Dlatego użyłem projektu bazy danych Visual Studio 2013, w którym zaimportowałem bazę danych. Po naprawieniu wielu błędów utknąłem z jednym błędem:

W jednym widoku twórcy używali OPENQUERYdo uzyskania dostępu do połączonego serwera. Zaimportowałem więc DACPAC, który zawiera odpowiednią bazę danych i dodałem go do projektu, używając Add Database Referencenastępujących opcji referencyjnych.

Ustawienia dla odwołania do bazy danych

Początkowa wersja skryptu

Oto krótsza wersja oryginalnego widoku:

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

Doprowadziło to do następującego błędu:

Błąd 136 SQL71501: Widok: [dbo]. [VwStatus] ma nierozwiązane odwołanie do obiektu [LinkedServer].

Pierwsze podejscie

Próbowałem więc wstawić zmienną nazwy serwera

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

Który prowadzi do

Błąd 176 SQL46010: Niepoprawna składnia w pobliżu $ (LinkedServer).

Dalsze próby

Szperałem trochę wokoło i wypróbowałem następujące opcje (z włączonymi cytowanymi identyfikatorami i bez nich):

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 

Zawsze pojawia się błąd.

Nie mam pojęcia, co tutaj przeoczam. Czy ty? Dziękuję za Twój czas!

(Niestety nie mogę dodać tagu visual-studio-2013, więc użyłem visual-studio)

Chake
źródło

Odpowiedzi:

9

Udało mi się to uruchomić:

Stworzyłem nowy projekt bazy danych master. Tam utworzyłem folder Server Objecti plik LinkedServer.sql. W pliku SQL dodałem połączony serwer:

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

Po dodaniu projektu bazy danych masterdo mojego rozwiązania i odesłaniu go do mojego oryginalnego projektu bazy danych , byłem w stanie zbudować projekt przy użyciu początkowej składni;

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1
Chake
źródło
Nadal nie mogę tego uruchomić, mimo że mam tam główny projekt z plikiem LinkedServers.sql
test
Cóż, trudno jest pomóc bez dodatkowych informacji. może lepiej zadać kolejne pytanie. Ważne jest, aby odwołać się do swojego głównego projektu w swoim rozwiązaniu. w przeciwnym razie zadziałało to dla mnie dokładnie tak, jak opisano.
Chake
W swoim rozwiązaniu - czy masz dacpac (y) lub projekt (y) z DBA LinkedServer?
Martin Meeser,
Cześć, nie pamiętam, ale napisałem w drugim akapicie, że używałem dacpaców. Ale do ostatecznego rozwiązania odwoływałem się do projektu bazy danych dla master DB.
Chake,
1
Pamiętaj, że musisz upewnić się, że plik „LinkedServer.sql” ma akcję kompilacji ustawioną na „Build”. Irytujące VS nie rozpoznaje połączonego serwera ze skryptu przedwdrożeniowego, w przeciwnym razie nie byłoby to konieczne.
Taran