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

Откуда: МИНСК
Сообщений: 1053
Добрый день всем.

SQL 2012

Есть куча (20) филиалов (SQL 2012)
откуда я тяну инфу через линк-сервер


SET @FSql = '
SELECT * INTO ##Tmp_Prom1
FROM OPENQUERY
( [@AServerName],
"
запрос 1
UNION ALL
запрос 2

логика сложная и когда добавил в подзапросы еще по 4 жойна - вылез за 8000
понятно что можно разбить на 2
но там логика почти одинаковая и НЕ хотелось бы бить ее искуственно


Есть ли спобос обойти по дургому
советы про EXECUTE AT я читал
НО

EXECUTE ( 'SELECT * INTO ##ZZ FROM csc..prix where id = 0') AT [lINK-SERVER]

отрабывтаыве безж ошибок
но таблицы ##ZZ нет ни там ни там
а мне надо эту таблицу получить к себе
9 сен 19, 17:30    [21967108]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 link-server запрос > 8000 знаков вытянуть таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29049
Гулин Федор
логика сложная и когда добавил в подзапросы еще по 4 жойна - вылез за 8000
понятно что можно разбить на 2
но там логика почти одинаковая и НЕ хотелось бы бить ее искуственно

Есть ли спобос обойти по дургому
Что "обойти", проблема то в чём?
9 сен 19, 18:32    [21967181]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 link-server запрос > 8000 знаков вытянуть таблицу  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 32146
Блог
Гулин Федор,

where id = 0; select * from ##zz
9 сен 19, 18:34    [21967182]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 link-server запрос > 8000 знаков вытянуть таблицу  [new]
invm
Member

Откуда: Москва
Сообщений: 8750
Гулин Федор
вылез за 8000
varchar(max) уже отменили?
9 сен 19, 18:44    [21967190]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 link-server запрос > 8000 знаков вытянуть таблицу  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1053
alexeyvg
Гулин Федор
логика сложная и когда добавил в подзапросы еще по 4 жойна - вылез за 8000
понятно что можно разбить на 2
но там логика почти одинаковая и НЕ хотелось бы бить ее искуственно

Есть ли спобос обойти по дургому
Что "обойти", проблема то в чём?


https://social.msdn.microsoft.com/Forums/sqlserver/en-US/031d3a2b-9095-4622-9ef5-7ac0f89e6f13/openquery-parameter-length-limitation-of-8000-characters?forum=transactsql

проблема вот - не может запрос быть больше 8000 символов
в openquery

зы пока по простому пути пошел - побил на 2 запроса.
10 сен 19, 09:14    [21967442]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 link-server запрос > 8000 знаков вытянуть таблицу  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1053
Критик
Гулин Федор,

where id = 0; select * from ##zz


СПАСИБО
да это работатет - но мне надо загнать результат в ##Tmp таблицу у себя

EXECUTE ( 'SELECT * INTO ##ZZ FROM csc..postavka where 1 = 0;SELECT * FROM  ##ZZ') AT [link]


INSERT INTO #Tmp EXECUTE(@FSql)
дожно прокатить - но я спец. уходил от этой конструкции
потому что резалтсет меняется очень часто ( поля добавлюятся-убираются )

можно ли загнать таким образом результат через Select * into from
10 сен 19, 09:21    [21967447]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 link-server запрос > 8000 знаков вытянуть таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29049
Гулин Федор
Критик
Гулин Федор,

where id = 0; select * from ##zz


СПАСИБО
да это работатет - но мне надо загнать результат в ##Tmp таблицу у себя

EXECUTE ( 'SELECT * INTO ##ZZ FROM csc..postavka where 1 = 0;SELECT * FROM  ##ZZ') AT [link]


INSERT INTO #Tmp EXECUTE(@FSql)
дожно прокатить - но я спец. уходил от этой конструкции
потому что резалтсет меняется очень часто ( поля добавлюятся-убираются )

можно ли загнать таким образом результат через Select * into from

В принципе можно создать пустую таблицу командой
EXECUTE('SELECT * INTO ##Tmp_Prom1 FROM OPENQUERY( [@AServerName],''........'')')
При этом во внутренний запрос добавить условие WHERE 1=0, и не делать условия для джойнов.
Тогда запрос поместится в 8000 символов.

А потом уже вставить данные командой:
INSERT INTO ##Tmp_Prom1 EXECUTE(@Sql) AT [link]
, где в @Sql будет уже полный запрос ,со всеми условиями


PS Но, безусловно, самое правильное - изменить архитектурный подход, потому что работать с неизвестными полями невозможно.
10 сен 19, 09:55    [21967478]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 link-server запрос > 8000 знаков вытянуть таблицу  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1053
alexeyvg,
СПС - да то воркараунд
но тогда уже проще просто CREATE TABLE #
в одном запросе пока < 5000 -

попутно возник вопрос по
EXECUTE ( '') AT [lINK-SERVER]

EXECUTE ( 'Exec md1..olap_dz_sync_dz2  15') AT [vsrv-sql-md1]

есть часть ETL написанная обратным образом - все с филиалов грузится через линк-сервер на главный
правильно ли я понимаю что
вызывая циклом как выше - эти SP будут выполянться на тех серверах
(я в принципе это вижу )
я хочу зашедулить это на своем ETL сервере ( а не на серверах филиалов - как сейчас )
вопрос - в доп. нагрузке - я понимаю что она Мала - только передать запрос на выполнение туда
10 сен 19, 17:51    [21968009]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2012 link-server запрос > 8000 знаков вытянуть таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29049
Гулин Федор
но тогда уже проще просто CREATE TABLE #
Дык вы же не знаете поля таблицы?
Если можно CREATE TABLE, тогда лучше да, сделать таблицу, а потом в неё инсёрт.

Гулин Федор
вызывая циклом как выше - эти SP будут выполянться на тех серверах
Да.

Гулин Федор
я хочу зашедулить это на своем ETL сервере ( а не на серверах филиалов - как сейчас )
вопрос - в доп. нагрузке - я понимаю что она Мала - только передать запрос на выполнение туда
Можете так, можете напрямую коннектиться из ETL на серверы филиалов.
10 сен 19, 19:23    [21968062]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить