Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Применительно к MS SQL 2008 R2, хотел сделать вот такое. На удаленном сервере создаю табличный тип, процедуру с входным параметром данного типа. Затем мне надо с другого сервера вызвать эту процу, передать ей в качестве параметра табличную переменную и получить данные (просто юзать многоэтажный запрос джойнящий данную табличную переменную с таблицами Linked Servera работает небыстро, была мысль ускорить). При попытке создать табл переменную с типом с удаленного сервера получаю е очень понятное - The type name 'RemoteServer1.DB.DBO' contains more than the maximum number of prefixes. The maximum is 1. Пытаюсь гуглить сообщение вкупе с LinkeServer, вижу обходные решения проблем, типа а передавайте ИД по которому табличку можно выбрать с удаленного сервака (вместо самой таблички). Правильно ли я понимаю, что через LinkedServer процус табличным параметром запустить невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 09:43 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovichДоброго времени суток! Применительно к MS SQL 2008 R2, хотел сделать вот такое. На удаленном сервере создаю табличный тип, процедуру с входным параметром данного типа. Затем мне надо с другого сервера вызвать эту процу, передать ей в качестве параметра табличную переменную и получить данные (просто юзать многоэтажный запрос джойнящий данную табличную переменную с таблицами Linked Servera работает небыстро, была мысль ускорить). При попытке создать табл переменную с типом с удаленного сервера получаю е очень понятное - The type name 'RemoteServer1.DB.DBO' contains more than the maximum number of prefixes. The maximum is 1. Пытаюсь гуглить сообщение вкупе с LinkeServer, вижу обходные решения проблем, типа а передавайте ИД по которому табличку можно выбрать с удаленного сервака (вместо самой таблички). 3. Правильно ли я понимаю, что через LinkedServer процус табличным параметром запустить невозможно? Мутность вашей логики пугает. 1. С какой радости сервер должен использовать определение типа с ДРУГОГО сервера? 2. Даже если этот бред бы осуществился... как сервер может получить доступ к временной таблице ДРУГОГО сервера. 3. Неправильно понимаешь. 3.1. Создать табличку-параметр на linked-сервере. 3.2. Заполнить яко надо. 3.3. Передать параметром процедуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 10:10 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
aleks222 Наверно не так описал, Чуть поточнее - на том серваке где происходит расчет у меня есть набор из айдишников (в виде табличной переменной), к этому набору мне надо подтянуть данные из базы на линкованом сервере, прямым запросом ' "@MyList List inner join RemoteServer1.DB.dbo.Table1...' это работает, но медленно, таблиц несколько, в плане запроса вижу 99 % стоимости - Remote Query. Поскольку непосредственно на удаленном серваке такой же запрос отрабатывает на порядки быстрее, мне показалось логичным на удаленном сервере создать процедуру, передавать в нее свою табличную переменную и получать результат. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. получаю ошибку Сообщение 7380, уровень 16, состояние 1, строка 44 Table-valued parameters are not allowed in remote calls between servers. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 14:47 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, если не рассматривать вариант сначала вставки на удалённый, потом выполнения, то я бы передавал через xml, если значений "приемлемое" количество ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 14:52 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, Пробовал также просто, без типа создавать табличную переменную той же структуры и передавать ее, но ожидаемо получил The attempt by the provider to pass remote stored procedure parameters to remote server ''RemoteServer1' failed. Verify that the number of parameters, the order, and the values passed are correct. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 14:54 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
TaPaK, От нескольких сотен, до ~15 К записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 14:57 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, Вообще то да, зарапартовался. При таком объеме самое то записывать в некую таблицу на удаленном серваке, потом передавать в процедуру ИД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 15:03 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovichTaPaK, От нескольких сотен, до ~15 К записей. та имхо не проблема, одна очень не маленькая контора вообще только на xml и живёт с огромной нагрузкой. зы А почему с линка не забрать данные для расчёта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 15:03 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, Но в общем случае, если бы объем данных был поменьще, отправить на удаленный сервер в качестве параметра, табличную переменную созданную на локальном не получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 15:06 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
TaPaK, там начиная с моей переменной с айдишниками последовательная связка связка по ключам из 8 довольно больших таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 15:15 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
TaPaK, Т.е. я как раз и забираю нужные данные оттуда, но хотел немного оптимизировать процесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 15:16 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, вариант с xml вполне себе простой, пробуйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 15:20 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich табличную переменную созданную на локальном не получится? denis_viktorovichполучаю ошибку Сообщение 7380, уровень 16, состояние 1, строка 44 Table-valued parameters are not allowed in remote calls between servers. Чукча явно писатель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 11:29 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
aleks222denis_viktorovich табличную переменную созданную на локальном не получится? denis_viktorovichполучаю ошибку Сообщение 7380, уровень 16, состояние 1, строка 44 Table-valued parameters are not allowed in remote calls between servers. Чукча явно писатель. чукча, ты ж сам ему насоветовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 11:35 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovichdenis_viktorovich, Но в общем случае, если бы объем данных был поменьще, отправить на удаленный сервер в качестве параметра, табличную переменную созданную на локальном не получится? Вопрос терминологии, а не реализации. Отправить user-defined type не получится. Отправить JSON или XML (любой другой приятный способ сериализации), или "указатель" на таблицу, на УДАЛЕННОМ сервере, с нужными параметрами - получится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 11:40 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
TaPaKaleks222пропущено... пропущено... Чукча явно писатель. чукча, ты ж сам ему насоветовал Не лги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 13:18 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
aleks222TaPaKпропущено... чукча, ты ж сам ему насоветовал Не лги. ты должен был в лучших традициях как обычно o-o делает вставить эту картинку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 13:41 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
TaPaK, Да, дошли руки, попробовал переделать. Собственно пишет - "Xml data type is not supported as a parameter to remote calls." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 16:30 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovichTaPaK, Да, дошли руки, попробовал переделать. Собственно пишет - "Xml data type is not supported as a parameter to remote calls." xml формат, тип VARCHAR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 16:45 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
пока остановился на варианте с таблицей, т.е. записываю свои Ид-шники в табличку с ИД сессии, потом при удаленном запуске процедуры передаю этот ИД сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 16:49 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
TaPaK, Код: sql 1. сработало правда в виде - Код: sql 1. 2. 3. но Varchar(max) может не хватить..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 16:56 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich но Varchar(max) может не хватить..... 2Gb маловато будет? а может, это не очень хорошая идея передавать такие объемы в виде параметра? табличные параметры вообще в 1 строку оцениваются, представляю, какой классный будет план, оптимизированный под 1 строку, а там на самом деле данных более 2Гб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 17:03 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
Yasha123denis_viktorovichно Varchar(max) может не хватить..... 2Gb маловато будет? а может, это не очень хорошая идея передавать такие объемы в виде параметра? табличные параметры вообще в 1 строку оцениваются, представляю, какой классный будет план, оптимизированный под 1 строку, а там на самом деле данных более 2Гб Зарапартовался, конечно varchar(max) хватает с избытком, кроме того пересмотрев вопрос, объем данных еще уменьшился. XML-ка у меня парсится и заливается во времянку, создается индекс. И основные запросы выполняются уже в джойне с ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 08:24 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
Но сейчас, с большим объемом данных снова уткнулся в вопрос производительности, за которую и боролся. Данные с удаленного сервака я забираю при помощи инсерта их хранимки Код: sql 1. . Таких вызовов в хранимке два, и в плане запроса я вижу, что стоимость их в сумме составляет порядка 75 % от всей процедуры. Причем, запуская на удаленном сервере, вижу что она выполняется довольно шустро, в плане никаких необычных задержек не вижу. На рабочем же , как только перед exec MyLinkedServer.MyBase.dbo.Procedure1 @tr_string появляется Insert into #Temp_table, в плане запроса вижу строку вида (select * from {IRowset 0xC0...}) с большой стоимостью. Как получить более детальную информацию о задержке при вставке во времянку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 09:22 |
|
||
|
процедура на LinkedServer с табличным параметром.
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, 1. Конструкция Insert into exec жутко забагованая лучше вообще не трогать :) 2. Это всё встаёт в в DTC 3. Забирать лучше SELECT ... FROM OPENQUERY(... exec ) ну и insert либо в созданную либо SELECT INTO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 10:42 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39561318&tid=1690433]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 216ms |
| total: | 354ms |

| 0 / 0 |
