Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
IFK Member Откуда: Гондурас Сообщений: 1025 |
Уважаемый форум! Искал и не нашел решение для небольшой заминки: есть linked server Serv1 на нем база Base1, в этой базе есть ХП SP1, которая возвращает набор записей. Вопрос: как на сервере Serv2 выполнить ХП SP1 на linked server и сохранить результаты работы в таблицу? Спасибо! |
19 июн 18, 15:28 [21503681] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
дивно в Гондурасе то гугел забнен :) ШО не одно решения не нашлось ? |
19 июн 18, 15:30 [21503695] Ответить | Цитировать Сообщить модератору |
Rankatan Member Откуда: Сообщений: 250 |
Берешь и выполняешь exec [linkname].[base].[dbo].[sp], только перед этим в настройках сервера даешь права на выполнение процедур. По умолчанию выключено. |
19 июн 18, 15:32 [21503701] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
Точно,забанен |
||
19 июн 18, 15:33 [21503709] Ответить | Цитировать Сообщить модератору |
IFK Member Откуда: Гондурас Сообщений: 1025 |
Maxx, если нечего сказать, предлагаю тебе отвалить. Спасибо заранее. |
19 июн 18, 16:00 [21503801] Ответить | Цитировать Сообщить модератору |
IFK Member Откуда: Гондурас Сообщений: 1025 |
Rankatan, так и делаю, но че-то не совсем пока понимаю, как возвращаемые результаты загнать во временную таблицу. :(EXEC sp_executeSQL @stmt = 'EXEC [Serv1].[Base1].[dbo].SP1' |
19 июн 18, 16:01 [21503804] Ответить | Цитировать Сообщить модератору |
Rankatan Member Откуда: Сообщений: 250 |
insert into tbl() EXEC [Serv1].[Base1].[dbo].SP1 |
19 июн 18, 16:04 [21503814] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
IFK, или INSERT INTO .. EXEC .. и получаете DTC + общую забагованность конструкции или SELECT INTO FROM OPENQUERY(EXEC ) |
19 июн 18, 16:06 [21503817] Ответить | Цитировать Сообщить модератору |
IFK Member Откуда: Гондурас Сообщений: 1025 |
|
||
19 июн 18, 16:33 [21503878] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
IFK, сервер не может знать - что вернется из процедуры. количество наборов данных и их состав. Поэтому не используйте процедуры для получения данных, используйте функции или обращения к таблицам. При использовании конструкции INSERT ... EXEC через связанный сервер, кроме всего прочего, получите распределенную транзакцию. Надо уметь ее готовить и не каждая корпоративная сеть разрешит такое. |
20 июн 18, 12:53 [21506441] Ответить | Цитировать Сообщить модератору |
IFK Member Откуда: Гондурас Сообщений: 1025 |
Владислав Колосов, спасибо за ответ. Может тогда посоветуете альтернативное решение для задачи: - необходимо организовать передачу данных между двумя базами данных, расположенных на разных сиквел-серверах. Задача минимум - получить данные из базы-источника данных - доступ к базе-источнику данных возможен только через ХП, которая принимает номер готового запроса, сохраненного в этой базе и возвращает результирующий набор записей - прямой доступ к таблицам или запросам базы-источника данных невозможен Спасибо! |
20 июн 18, 13:28 [21506563] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
IFK, Используйте Integration Services, создаете два подключения источник и приемник, на источнике выполняете процедуру и так далее. Да и вставка будет намного быстрее. |
20 июн 18, 13:53 [21506657] Ответить | Цитировать Сообщить модератору |
IFK Member Откуда: Гондурас Сообщений: 1025 |
Владислав Колосов, хм, с источником не могу делать ничего, в том числе создавать и выполнять ХП. |
20 июн 18, 13:58 [21506682] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
IFK, ничего не путаете?
Serv1 и есть источник. При использовании SSIS потребуется синтаксис EXEC Proc WITH RESULT SETS. |
||
20 июн 18, 14:49 [21506877] Ответить | Цитировать Сообщить модератору |
IFK Member Откуда: Гондурас Сообщений: 1025 |
Владислав Колосов, пардон, это, наверное, путаница в терминах. Я имел в ввиду, что Serv2 - источник ДАННЫХ. А что Вы имели в виду под источником? |
20 июн 18, 15:17 [21507054] Ответить | Цитировать Сообщить модератору |
IFK Member Откуда: Гондурас Сообщений: 1025 |
Пардон. Игнор последнего поста. Владислав прав - Serv1 источник данных. |
20 июн 18, 16:01 [21507212] Ответить | Цитировать Сообщить модератору |
Idol_111 Member Откуда: Сообщений: 614 |
А в чем тут забагованность? При использовании Linked server почти (можно ведь и отключить DTC для этого линка) всегда DTC идет паравозом. Владислав Колосов, Это при каком раскладе "сеть" захочет запретить DTC между двумя SQL серверами? Конечно, любители извращений могут и SSIS пакет наваять для такой простой задачи (если конечно вы не миллион записей таскаете с место на место). Но тут уже кто как хочет создает себе головняк. |
||
21 июн 18, 02:40 [21508341] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Idol_111,
Речь про INSERT INTO EXEC которой лучше вообще не пользоваться |
||
21 июн 18, 08:46 [21508450] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
Idol_111,
при очень простом - открыты 80, 110, 23 и 1433 порты. Всё остальное закрыто требования безопасности. |
||
21 июн 18, 17:35 [21510430] Ответить | Цитировать Сообщить модератору |
Idol_111 Member Откуда: Сообщений: 614 |
включаете Distributed Transaction Coordinator (TCP-In) в файрволе и все работает. |
||||
22 июн 18, 02:22 [21511396] Ответить | Цитировать Сообщить модератору |
Idol_111 Member Откуда: Сообщений: 614 |
если сложно описать, то хоть ссылку дайте почитать. А то я прям заинтригован :). |
||||
22 июн 18, 02:24 [21511400] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
для любителей новых дверей из последних на sql 2014+ CREATE TABLE dbo.tmp (Id INT IDENTITY(1,1) ,Code VARCHAR(1)) INSERT INTO dbo.tmp (Code) VALUES('A') INSERT INTO dbo.tmp (Id,Code) EXEC (N'SELECT 1,1') INSERT INTO dbo.tmp (Code) VALUES('X') SELECT * FROM dbo.tmp DROP TABLE tmp ну и дальше в гугл bad+practice+insert+into+exec |
||||
22 июн 18, 09:04 [21511614] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
вот ещё весёлый https://dba.stackexchange.com/questions/155684/bug-in-database-scoped-configurations но мы же не отговариваем вас скакать по граблям, скачите :) |
22 июн 18, 09:26 [21511721] Ответить | Цитировать Сообщить модератору |
Idol_111 Member Откуда: Сообщений: 614 |
TaPaK, спасибо за объяснения. У любого метода есть ограничения, их просто нужно знать и применять метод соответственно. |
25 июн 18, 01:29 [21517518] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
То есть вы понятия не имеете какие требования к настройке DTC и как они могут взаимодействовать с корпоративной политикой безопасности. |
||||
25 июн 18, 13:03 [21518387] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |