Menggunakan server tertaut dengan OPENQUERY dalam proyek basis data

10

Saya memiliki SQL Server 2008 yang menjalankan database yang ingin saya masukkan ke TFS. Oleh karena itu saya menggunakan proyek database Visual Studio 2013 di mana saya mengimpor DB. Setelah memperbaiki banyak kesalahan, saya terjebak hanya dengan satu kesalahan yang tersisa:

Dalam satu tampilan devs digunakan OPENQUERYuntuk mengakses server yang ditautkan. Jadi saya mengimpor DACPAC yang berisi database yang tepat dan menambahkannya ke proyek dengan menggunakan Add Database Referenceopsi referensi berikut.

Pengaturan untuk Referensi Database

Versi Script Awal

Ini adalah versi yang lebih pendek dari pembuatan tampilan asli:

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

Ini mengarah pada kesalahan berikut:

Kesalahan 136 SQL71501: Lihat: [dbo]. [VwStatus] memiliki referensi yang belum terselesaikan ke objek [LinkedServer].

Percobaan pertama

Jadi saya mencoba memasukkan variabel nama server

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

Yang mengarah ke

Kesalahan 176 SQL46010: Sintaks salah dekat $ (LinkedServer)

Upaya Lebih Lanjut

Saya mengutak-atik sedikit dan mencoba yang berikut (dengan dan tanpa pengenal kutipan diaktifkan):

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 

Saya selalu mendapatkan kesalahan.

Saya tidak tahu apa yang saya hadapi di sini. Apakah kamu? Terima kasih atas waktunya!

(Sayangnya saya tidak bisa menambahkan tag visual-studio-2013, jadi saya menggunakan visual-studio)

Chake
sumber

Jawaban:

9

Saya sudah berhasil membuatnya bekerja:

Saya membuat proyek database baru master. Di sana saya membuat folder Server Objectdan file LinkedServer.sql. Dalam file SQL saya menambahkan server yang ditautkan:

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

Setelah menambahkan Proyek basis data masterke solusi saya dan merujuknya ke proyek basis data asli saya, saya dapat membangun proyek menggunakan sintaksis awal;

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1
Chake
sumber
Saya masih tidak bisa mendapatkan ini berfungsi meskipun memiliki proyek master dengan file LinkedServers.sql di sana
test
Yah, sulit untuk membantu tanpa lebih banyak informasi. mungkin lebih baik mengajukan pertanyaan lain. Sangat penting untuk merujuk proyek master Anda dalam solusi Anda. Kalau tidak, ini bekerja untuk saya persis seperti yang dijelaskan.
Chake
Di dalam solusi Anda - apakah Anda memiliki dacpac atau proyek dengan DBA LinkedServer?
Martin Meeser
Hai, saya tidak ingat, tetapi saya menulis di paragraf kedua, bahwa saya telah menggunakan dacpacs. Tetapi untuk solusi terakhir saya mereferensikan proyek database untuk DB master.
Chake
1
Catatan Anda harus memastikan file 'LinkedServer.sql' Anda telah membangun aksi yang ditetapkan ke 'Build'. Annoyingly VS tampaknya tidak mengenali server yang ditautkan dari skrip Pre Deployment, atau semua ini tidak diperlukan.
Taran