powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вставка данных из связного сервера
25 сообщений из 29, страница 1 из 2
Вставка данных из связного сервера
    #39606981
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует задача в которой необходимо в заданную таблицу вставлять данные из связного сервера.
Для унификации решено выполнять процедуру вставки на исходном сервере, запрос должен выглядеть примерно так

Код: sql
1.
2.
INSERT INTO dbo.SourceTable
EXEC [linkedServer].[dbName].Scheme.[StoreProcedure]


где хранимка StoreProcedure возвращает 1 набор данных

Запрос в формате

Код: sql
1.
2.
INSERT INTO dbo.SourceTable
SELECT * from [linkedServer].[dbName].Scheme.Table



работает без проблем, а с использование хранимки вываливается ошибка Distributed transaction.
Можете пояснить почему так происходит. И так избавиться от ошибки.
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39606996
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec () at server
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39606998
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик,

Мне это не подходит, я планирую заворачивать вызов хранимки в EXEC(''), и динамически задавать имя связного сервера, так как заранее не знаю с какого необходимо будет получить данные, насколько мне известно AT SERVER нельзя завернуть в динамический SQL
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607004
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452работает без проблем, а с использование хранимки вываливается ошибка Distributed transaction.1. и что это за ошибка?
2. просто вызов процедуры без вставки в табл работает?
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607008
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушка,

Да, просто вызов работет. А на счет ошибки, если бы я знал что она означает, то на форум бы ни писал. Как я понял, что запрещены распределенные транзакции. Вот мне не понятно, почему процедуру можно выполнить, но нельзя вставить данные в таблицу
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607020
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452Вот мне не понятно, почему процедуру можно выполнить, но нельзя вставить данные в таблицуПотому что insert всегда выполняется в транзакции.
Настраивайте DTC.
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607036
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmНастраивайте DTC.
Не всегда есть такая возможность.
Может есть другие варианты решения задачи.

Необходимо реализовать вставку данных из связных серверов в одну общую целевую таблицу (TargetTable).
Сейчас реализовано так, что создается подключение к связному и данные оттуда заносятся в TargetTable, то есть на момент выполнения происходит вставка данных на связный сервер, но это как показали сравнительные тесты медленный способ.
Вот и хочется переделать так чтобы процедура выполнялась на сервере с TargetTable.
Но есть ряд ограничений:
Источники с данными имеют разный формат, то есть для каждого нужно писать индивидуальный запрос на выборку,
поэтому и хочется завернуть его в хранимую процедуру на сервере источнике и обращаться к ним через EXEC('') c подменой имени сервера
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607042
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452с использование хранимки вываливается ошибка Distributed transaction.
Можете пояснить почему так происходит. И так избавиться от ошибки.Установите для linked server параметр remote proc transaction promotion в FALSE
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607046
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452А на счет ошибки, если бы я знал что она означает, то на форум бы ни писал.дело не в знании, логично скопипастить сюда полный текст ошибки, а не пересказывать урезанную версию, чтобы все играли в угадайку.
lex452Необходимо реализовать вставку данных из связных серверов в одну общую целевую таблицу (TargetTable).
Источники с данными имеют разный формати почему не используете специально предназначенный для этого инструмент - SSIS?
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607050
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушка,

Ssis я в принципе тоже планировал попробовать подцепить, но их сложнее поддерживать и менять, чем хранимые процедуры
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607258
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452Существует задача в которой необходимо в заданную таблицу вставлять данные из связного сервера.
Для унификации решено выполнять процедуру вставки на исходном сервере, запрос должен выглядеть примерно так

Код: sql
1.
2.
INSERT INTO dbo.SourceTable
EXEC [linkedServer].[dbName].Scheme.[StoreProcedure]


где хранимка StoreProcedure возвращает 1 набор данных

Запрос в формате

Код: sql
1.
2.
INSERT INTO dbo.SourceTable
SELECT * from [linkedServer].[dbName].Scheme.Table



работает без проблем, а с использование хранимки вываливается ошибка Distributed transaction.
Можете пояснить почему так происходит. И так избавиться от ошибки.

а так?
Код: sql
1.
2.
3.
4.
declare @sourceTable table ...

INSERT INTO @sourceTable
EXEC [linkedServer].[dbName].Scheme.[StoreProcedure]
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607259
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,

Обход DTC через
Код: sql
1.
INSERT INTO ... SELECT * FROM OPENQUERY(...'EXEC')
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607267
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKlex452,

Обход DTC через
Код: sql
1.
INSERT INTO ... SELECT * FROM OPENQUERY(...'EXEC')


Openquery не поддерживает параметризация, насколько я помню
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607270
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

А чем Ваше предложение отличается от того что я написал в самом первом вопросе?
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607272
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452TaPaKlex452,

Обход DTC через
Код: sql
1.
INSERT INTO ... SELECT * FROM OPENQUERY(...'EXEC')


Openquery не поддерживает параметризация, насколько я помню
что?
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607491
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmlex452Вот мне не понятно, почему процедуру можно выполнить, но нельзя вставить данные в таблицуПотому что insert всегда выполняется в транзакции.
Настраивайте DTC.

Нет, ошибка возникает при EXEC. Insert не инициирует распределенную транзакцию, но EXEC - да.
Если между серверами файрвол, то настройка DTC требует открытия довольно большого диапазона портов, на что админы не всегда идут.

Настройте приложение так, чтобы процедура на удаленном сервере складывала данные в локальную для этого сервера таблицу, а затем забирайте данные при помощи Insert.
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607497
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

а при чём тут фаервол??
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607510
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvglex452с использование хранимки вываливается ошибка Distributed transaction.
Можете пояснить почему так происходит. И так избавиться от ошибки.Установите для linked server параметр remote proc transaction promotion в FALSE
Вот это помогло
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607511
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKlex452пропущено...

Openquery не поддерживает параметризация, насколько я помню
что?нельзя переменной задать имя сервера подключения
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607514
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452TaPaKпропущено...

что?нельзя переменной задать имя сервера подключения
dynamic sql? всё обернуть в sp_executesql
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607534
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKlex452,

Обход DTC через
Код: sql
1.
INSERT INTO ... SELECT * FROM OPENQUERY(...'EXEC')


Спасибо, забрал.
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607735
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKВладислав Колосов,

а при чём тут фаервол??

Для работы DTC, который использует распределенная транзакция, нужны TCP порты, межсерверный файрвол/прокси их может закрыть.
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607754
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lex452,

Попробуй объекты связанного сервера обернуть в синонимы.
Код: sql
1.
CREATE SYNONYM FOR [linkedServer].[dbName].Scheme.[StoreProcedure]



Запросы с OPENQUERY сложно параметризировать, а с синонимами ты можешь существенно сократить объем траффика по сети так как работает фильтр на данные.
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607756
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cristiano_Rivaldolex452,

Попробуй объекты связанного сервера обернуть в синонимы.
Код: sql
1.
CREATE SYNONYM FOR [linkedServer].[dbName].Scheme.[StoreProcedure]



Запросы с OPENQUERY сложно параметризировать, а с синонимами ты можешь существенно сократить объем траффика по сети так как работает фильтр на данные.
и снионим избавит от DTC? и какой филтр на данные



авторДля работы DTC, который использует распределенная транзакция, нужны TCP порты, межсерверный файрвол/прокси их может закрыть.
тут вы немного правы, ибо ТС не привёл полный текст ошибки, но ввиду того что он даже не настраивал DTC для сервера, то это очень сильно мимо
...
Рейтинг: 0 / 0
Вставка данных из связного сервера
    #39607759
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Хотел сказать что в большинстве случаев синонимы удобннее , чем OPENQUERY. Можно указывать фильтры в блоке where без дрочева в динамическом sql - е.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вставка данных из связного сервера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]