помогите с t-sql связанным сервером - PullRequest
1 голос
/ 05 августа 2010

На основе 2 баз данных ниже:

Database_A on Server_1
Database_B on Server_2

У меня есть created a linked server to Database_B on Server_1 instance by name 'LS_B'.

У меня есть огромный файл сценария, который в основном создает необходимые таблицы, функции, представления и хранимые процедуры наDatabase_A.

Эти функции, представления и хранимые процессы в свою очередь относятся к таблицам Database_B.

Проблема в том, что мне нужно идти и включать OPENQUERY(LS_B,<query refering to database_b table>) везде в файле сценария.Например,

create procedure some_proc
as
begin
    select * from openquery(LS_B, 'select * from [Database_B].[dbo].[Table_1]');
end

Есть ли лучший способ сделать это?

Просьба.предложить.

Спасибо

обновление

, почему это не получается

select top (50) * from LS_B.[Database_B].[dbo].[Table_1]

, пока ниже работает

select * from OpenQuery(LS_B, 'select top (50) * from Database_B.dbo.Table_1') 

Сообщение об ошибке при выполнении первого запроса:

Невозможно обработать объект "" Database_B "." Dbo "." Table_1 "".Поставщик OLE DB «SQLNCLI10» для связанного сервера «LS_B» указывает, что либо у объекта нет столбцов, либо у текущего пользователя нет разрешений на этот объект

Оба сервера находятся в одном домене.

1 Ответ

2 голосов
/ 05 августа 2010

Если оба сервера являются серверами SQL, вы можете использовать следующий синтаксис:

select * from LS_B.[Database_B].[dbo].[Table_1]

Зависит ли ваш существующий синтаксис от упрощения поиска и замены.

Вы также можете создать группу представлений на сервере 1, названную в честь таблиц, на которые ссылаются в sps, и затем эти представления ссылаются на связанный сервер:

CREATE VIEW Table_1
AS
select * from LS_B.[Database_B].[dbo].[Table_1]
...