Використання зв'язаного сервера з OPENQUERY в проекті бази даних


10

У мене є SQL Server 2008 з базою даних, яку я хочу передати в TFS. Тому я використав проект бази даних Visual Studio 2013, куди імпортував БД. Після виправлення купи помилок у мене залишилася лише одна помилка:

З одного перегляду розробники, що використовуються OPENQUERYдля доступу до пов'язаного сервера. Тож я імпортував DACPAC, який містить потрібну базу даних, і додав її до проекту, використовуючи Add Database Referenceнаступні параметри.

Налаштування довідкової бази даних

Початкова версія сценарію

Ось коротша версія оригінального створення перегляду:

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

Це призводить до наступної помилки:

Помилка 136 SQL71501: Вид: [dbo]. [VwStatus] має невирішене посилання на об’єкт [LinkedServer].

Перша спроба

Тому я спробував вставити змінну імені сервера

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

Що призводить до

Помилка 176 SQL46010: Неправильний синтаксис біля $ (LinkedServer).

Подальші спроби

Я трохи поспішив і спробував наступне (з увімкненими і не ввімкнутими ідентифікаторами):

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 

Я завжди отримую помилку.

Я не маю поняття, що я тут оглядаю. Чи ти? Дякую за ваш час!

(На жаль, я не можу додати тег visual-studio-2013, тому я використав візуальну студію)

Відповіді:


9

Мені вдалося змусити його працювати:

Я створив новий проект бази даних master. Там я створив папку Server Objectта файл LinkedServer.sql. У файл SQL я додав пов'язаний сервер:

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

Після додавання бази даних Project masterдо мого рішення та посилання на нього в своєму оригінальному проекті бази даних, я зміг створити проект, використовуючи початковий синтаксис;

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

Я досі не можу змусити це працювати, незважаючи на те, що там мастер-проект із файлом LinkedServers.sql
тест

Ну, важко допомогти без додаткової інформації. можливо, краще поставити інше питання. Важливо посилатися на свій головний проект у своєму рішенні. інакше це працювало для мене саме так, як описано.
Чак

У вашому рішенні - чи є у вас дакпак (и) або проект (и) з DBA-кодами LinkedServer?
Мартін Мізер

Привіт, я не можу згадати, але я написав у другому абзаці, що я використовував дакпаки. Але для остаточного рішення я посилався на проект бази даних для головного БД.
Чак

1
Зауважте, що ви повинні переконатися, що у вашому файлі "LinkedServer.sql" встановлено дію "Створення". Напевно VS, схоже, не розпізнає пов'язаний сервер із сценарію попереднього розгортання, або все це не буде необхідним.
Таран
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.