Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Linked server. Использование хранимок, функций.  [new]
Mashtar
Member

Откуда:
Сообщений: 40
День добрый. Столкнулся с проблемой. Есть server1 у которого есть linked server2. Структура и названия баз одинакова.
Нужно сделать хранимку на server1, но чтобы она работала и на server2. Как это сделать?
Вариант типа:
If @serverid = 1
begin
Select Id from db1.dbo.test
end
If @Serverid = 2
begin
Select Id from server2.db1.dbo.test
end

Не устраивает. Можно как-то не копипастя тучу кода сделать это компактнее? Заранее спасибо.
12 ноя 13, 16:22    [15116462]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mashtar
Нужно сделать хранимку на server1, но чтобы она работала и на server2.

Если "Структура и названия баз одинакова.", то Select Id from db1.dbo.test будет работать везде
12 ноя 13, 16:26    [15116506]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory,
Извиняюсь не сказал, вызывать эту хранимку я хочу с servera1
12 ноя 13, 16:49    [15116717]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mashtar
вызывать эту хранимку я хочу с servera1

И в чем проблема ?
12 ноя 13, 16:50    [15116726]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mashtar
Можно как-то не копипастя тучу кода сделать это компактнее?

Динамический SQL?
12 ноя 13, 16:54    [15116764]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory
Mashtar
вызывать эту хранимку я хочу с servera1

И в чем проблема ?

А проблема в том, что я не знаю как динамически подставить алиас линкованого сервака в хранимке, не плодя много много строк почти одинакового кода. Собственно поэтому и спрашиваю как.
12 ноя 13, 16:57    [15116792]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mashtar
А проблема в том, что я не знаю как динамически подставить алиас линкованого сервака в хранимке,

Ничего не понял
Если на server1 есть процедура, то она всегда вызывается как exec server1.mydb.myschema.myproc
Что на server1, что на server2
И процедура всегда выполняется на server1
12 ноя 13, 17:00    [15116820]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, правду говоришь. Но меня интересует расположить процедуру на server1, написать в ней какой то запрос и использовать ее как для получения данных с server1 так и с server2. При этом не делать запрос как указал в первом посте, а как то подставлять алиас сервера.
12 ноя 13, 18:05    [15117405]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mashtar
Но меня интересует расположить процедуру на server1, написать в ней какой то запрос и использовать ее как для получения данных с server1 так и с server2.

Напишите 2 процедуры
12 ноя 13, 18:06    [15117425]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory,
если бы я мог написать 2 процедуры и расположить их на 2ух серверах - я бы так и сделал, но увы. Может есть еще вариант?
12 ноя 13, 18:08    [15117436]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mashtar
если бы я мог написать 2 процедуры и расположить их на 2ух серверах - я бы так и сделал, но увы. Может есть еще вариант?

Напишите 2 процедуры на _одном_ сервере
12 ноя 13, 18:10    [15117448]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Mashtar,

Вы - знатный извращенец :)
Вот вам тогда извращенный способ: внутри процедуры пользуетесь только синонимами. Перед вызовом создаете эти синонимы либо для локальных, либо для удаленных объектов. Думаю, минусы такого подхода вам очевидны.
12 ноя 13, 19:12    [15117712]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Mashtar
День добрый. Столкнулся с проблемой. Есть server1 у которого есть linked server2. Структура и названия баз одинакова.
Нужно сделать хранимку на server1, но чтобы она работала и на server2. Как это сделать?
Вариант типа:
If @serverid = 1
begin
Select Id from db1.dbo.test
end
If @Serverid = 2
begin
Select Id from server2.db1.dbo.test
end

Не устраивает. Можно как-то не копипастя тучу кода сделать это компактнее? Заранее спасибо.


А так?

CREATE PROC db1.dbo.usp_Universal
AS
If @@Servername = 'server1'
begin
Select Id from db1.dbo.test
end
If @@Servername = 'server2'
begin
EXEC server1.db1.dbo.usp_Universal
end
Return;
12 ноя 13, 19:47    [15117828]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
DECLARE @Proc sysname = N'Server1.db1.schema1.ProcName';

EXEC @Proc @Par1, @Par2,...;

SET @Proc = N'Server2.db1.schema1.ProcName';

EXEC @Proc @Par1, @Par2,...;
12 ноя 13, 19:58    [15117865]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
iap,

Не, такой способ не подходит, ТС не может создавать на других серверах процедуры.

Единственный выход - динамический SQL
12 ноя 13, 20:01    [15117875]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
alexeyvg
iap,

Не, такой способ не подходит, ТС не может создавать на других серверах процедуры.

Единственный выход - динамический SQL

Ты прав.
12 ноя 13, 21:14    [15118042]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Mashtar
Member

Откуда:
Сообщений: 40
SandalTree
Mashtar
День добрый. Столкнулся с проблемой. Есть server1 у которого есть linked server2. Структура и названия баз одинакова.
Нужно сделать хранимку на server1, но чтобы она работала и на server2. Как это сделать?
Вариант типа:
If @serverid = 1
begin
Select Id from db1.dbo.test
end
If @Serverid = 2
begin
Select Id from server2.db1.dbo.test
end

Не устраивает. Можно как-то не копипастя тучу кода сделать это компактнее? Заранее спасибо.


А так?

CREATE PROC db1.dbo.usp_Universal
AS
If @@Servername = 'server1'
begin
Select Id from db1.dbo.test
end
If @@Servername = 'server2'
begin
EXEC server1.db1.dbo.usp_Universal
end
Return;


Собственно я это и имел ввиду когда писал пример.
13 ноя 13, 09:45    [15119402]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mashtar
Собственно я это и имел ввиду когда писал пример.

Вот интересно, а как выполнится условие If @@Servername = 'server2', если вы ничего не можете создавать на 'server2' ?
13 ноя 13, 10:11    [15119526]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory,
Все верно, создавать не могу. В варианте предложенном SandalTree, наверное имелось ввиду вызывать другую процедуру которая лезет на Link сервер. Поэтому и отмел этот вариант, т.к. является схожим с написание разных запросов для разных серверов.
В любом случае, спасибо за вопрос.
13 ноя 13, 11:30    [15120099]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
iap
DECLARE @Proc sysname = N'Server1.db1.schema1.ProcName';
EXEC @Proc @Par1, @Par2,...;
SET @Proc = N'Server2.db1.schema1.ProcName';
EXEC @Proc @Par1, @Par2,...;
+1
Только не туда направлено. Нужно создавать локально две процедуры:
А далее вызывать в зависимости от, способом предложенным iap.

Я так и не понял смысла задачи.

Может SYNONYMы решат проблему.
13 ноя 13, 14:20    [15121409]     Ответить | Цитировать Сообщить модератору
 Re: Linked server. Использование хранимок, функций.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Mnior
Я так и не понял смысла задачи.
Задача - иметь единый код на одном сервере для обращения к объектам на разных серверах.
Mnior
Может SYNONYMы решат проблему.
15117712
13 ноя 13, 14:56    [15121775]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить