Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как вытащить данные со связанного сервера? / 25 сообщений из 25, страница 1 из 1
24.05.2021, 11:28
    #40072402
Как вытащить данные со связанного сервера?
Здравствуйте!

Нужно получать данные с другого связанного сервера. Он у меня виден в дереве объектов.
Пробую получить данные:
Код: sql
1.
2.
3.
SELECT 
* 
FROM [IP связанного сервера].имя_БД.схема.Имя_табличной_функции('параметр1', 'параметр2', 'параметр3')


И получаю:
авторУдаленные вызовы функций, возвращающих табличное значение, не допускаются.
Пробовал через
Код: sql
1.
SELECT * FROM OPENQUERY(Идентификатор_связанного_сервера, 'SELECT * FROM [IP связанного сервера].имя_БД.схема.Имя_табличной_функции(''параметр1'', ''параметр2'', ''параметр3'')')


примерно тоже самое ответило.
Как правильно получать данные со связанного сервера?

желаю Вам счастья
...
Рейтинг: 0 / 0
24.05.2021, 11:46
    #40072408
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун,

"SQL Server Linked Server Limitations
Linked Servers can be very useful, but there are a few limitations of which to be aware before implementing them. Linked Servers cannot be used to call table valued or scalar functions. Also, the truncate command is not allowed to be called using a Linked Server."
https://www.mssqltips.com/sqlservertip/6083/understanding-sql-server-linked-servers

создайте представление (view) и попробуйте выгружать его
...
Рейтинг: 0 / 0
24.05.2021, 12:04
    #40072416
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун
Пробовал через
Код: sql
1.
SELECT * FROM OPENQUERY(Идентификатор_связанного_сервера, 'SELECT * FROM [IP связанного сервера].имя_БД.схема.Имя_табличной_функции(''параметр1'', ''параметр2'', ''параметр3'')')

[IP связанного сервера] уберите.
...
Рейтинг: 0 / 0
24.05.2021, 12:17
    #40072421
Как вытащить данные со связанного сервера?
invm
[IP связанного сервера] уберите.

Спасибо! Заработало!
Получается я компаную строку нужными параметрами и вперед, все будет работать?
...
Рейтинг: 0 / 0
24.05.2021, 12:33
    #40072426
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун,

Код: sql
1.
exec('SELECT * FROM имя_БД.схема.Имя_табличной_функции(?, ?, ?)', @параметр1, @параметр2, @параметр3) at Идентификатор_связанного_сервера;
...
Рейтинг: 0 / 0
24.05.2021, 14:13
    #40072453
Как вытащить данные со связанного сервера?
invm,

а как сервер в этом варианте поймет, что нужно обратиться к функции прилинкованного сервера?
...
Рейтинг: 0 / 0
24.05.2021, 14:42
    #40072461
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун,


Код: sql
1.
exec('SELECT * FROM имя_БД.схема.Имя_табличной_функции(?, ?, ?)', @параметр1, @параметр2, @параметр3) at Идентификатор_связанного_сервера;
...
Рейтинг: 0 / 0
24.05.2021, 14:43
    #40072463
Как вытащить данные со связанного сервера?
felix_ff,

слона то я и не заметил. Спасибо!
...
Рейтинг: 0 / 0
24.05.2021, 18:02
    #40072544
Как вытащить данные со связанного сервера?
Пока вариант с exec не работает("Сервер "..." не настроен для RPC").
Поэтому пробую заставить работать вариант с openquery вот так:
Код: sql
1.
2.
INSERT #stek(dev_is_set, kWh_charge, rub_charge, rub_payment, kWh_charge_appg, rub_charge_appg,	rub_payment_appg)
SELECT * FROM OPENQUERY(linked_server , 'SELECT * FROM sevkav_fl_dagen.stack.GetPSPDatabyLSNumber(''' + @D_Date0 + ''', ''' + @pa_number + ''', ''' + @dev_number + ''')')


Но компилятору не нравится +:
авторНеправильный синтаксис около конструкции "+".
Как можно исправить вариант OPENQUERY?
...
Рейтинг: 0 / 0
24.05.2021, 18:24
    #40072550
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун,

Вложенный динамический SQL. С четверными кавычками, да.

Лучше включить RPC.
...
Рейтинг: 0 / 0
25.05.2021, 09:26
    #40072614
Как вытащить данные со связанного сервера?
Ennor Tiegael,

да я не против, но пока не получается у админов включить. На EXEC теперь такое возвращается:
авторПоставщик OLE DB "SQLNCLI11" для связанного сервера "х" вернул сообщение "Эта транзакция уже была явно или неявно зафиксирована или отменена".
Msg 7391, Level 16, State 2, Line 825
Операция не может быть выполнена, так как поставщику OLE DB "SQLNCLI11" для связанного сервера "х" не удалось начать распределенную транзакцию.


А как в вариант с OPENQUERY добавить свои переменные?
...
Рейтинг: 0 / 0
25.05.2021, 10:07
    #40072626
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун,

А это уже MSDTC. Причин может быть множество, начать можно, например, отсюда .
...
Рейтинг: 0 / 0
06.09.2021, 16:56
    #40095548
Как вытащить данные со связанного сервера?
Здравствуйте!

Скажите, можно ли на связанном сервере запустить скрипт, хранящийся в строковой переменной?
...
Рейтинг: 0 / 0
06.09.2021, 17:17
    #40095553
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун
Здравствуйте!

Скажите, можно ли на связанном сервере запустить скрипт, хранящийся в строковой переменной?

можно
например
Код: sql
1.
exec ('declare @s varchar(50) ; set @s=db_name(); exec sp_executesql N''select @@servername [srv], @var [db]'',N''@var varchar(50)'',@var=@s') at [LINKED]


...
Рейтинг: 0 / 0
06.09.2021, 17:23
    #40095556
Как вытащить данные со связанного сервера?
komrad, спасибо.
Просто у меня команда типа:
Код: sql
1.
2.
INSERT #b08_results([Number],[GroupName],[GroupName2],[C_Name],[ed_izm],[Total],[CN2],[NN],[Total_Dop],CN2_Dop],[NN_Dop],[Disagree],[B_Visible],[Color],[B_Bold],[N_Code],[N_Sum_Technic]) 
	EXEC(@definition) at [127.0.0.1] -- [CurrentServer]


выдает ошибку:
авторИспользовать связанные серверы в режиме олицетворения без сопоставления с олицетворяемым именем для входа нельзя.
...
Рейтинг: 0 / 0
06.09.2021, 17:27
    #40095558
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун,
покажите закладку Security вашего линкед сервера
...
Рейтинг: 0 / 0
06.09.2021, 17:31
    #40095560
Как вытащить данные со связанного сервера?
komrad,
...
Рейтинг: 0 / 0
06.09.2021, 18:19
    #40095570
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун,

попробуйте в качестве теста использовать sql логин с нужными привилегиями (опция "be made using this security context")

приведите номер получаемой ошибки
...
Рейтинг: 0 / 0
06.09.2021, 21:34
    #40095598
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун
Здравствуйте!

Скажите, можно ли на связанном сервере запустить скрипт, хранящийся в строковой переменной?


А смысл какой использовать связанный сервер в ETL задачах? Используйте SSIS для загрузки данных. Вы же не носите по одному кирпичу со вклада, а берете грузовик.
...
Рейтинг: 0 / 0
07.09.2021, 09:52
    #40095643
Как вытащить данные со связанного сервера?
komrad,

авторMsg 18456, Level 14, State 1, Line 7
При входе в систему пользователя "EIVK\Garkun-bn" произошла ошибка.
...
Рейтинг: 0 / 0
07.09.2021, 09:54
    #40095644
Как вытащить данные со связанного сервера?
Владислав Колосов,

я пытаюсь обойти запрет на INSERT EXEC, который срабатывает из-за того, что внутри запускаемой ХП уже есть такая конструкция
...
Рейтинг: 0 / 0
07.09.2021, 11:06
    #40095661
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун,

такой скрипт отрабатывает?

Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @tbl table (dt datetime default getdate(),srv sysname,usr sysname)
declare @cmd varchar(50) = 'select @@servername,original_login()'

insert into @tbl (srv,usr)
exec (@cmd) at [LINKED]

select * from @tbl
...
Рейтинг: 0 / 0
07.09.2021, 11:56
    #40095684
Как вытащить данные со связанного сервера?
komrad, да. Показывает заполненную таблицу с датой, названием сервера и моим логином
...
Рейтинг: 0 / 0
07.09.2021, 12:31
    #40095701
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вытащить данные со связанного сервера?
Борис Гаркун
komrad, да. Показывает заполненную таблицу с датой, названием сервера и моим логином

значит механизм работает
разбирайтесь, что не так с вашей @definition

EXEC(@definition) at [127.0.0.1]

попробуйте запустить просто exec, без insert
...
Рейтинг: 0 / 0
09.09.2021, 11:19
    #40096272
Как вытащить данные со связанного сервера?
komrad,

оказывается надо было создать пользователя, через которого бы проходили запросы к связанному серверу
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как вытащить данные со связанного сервера? / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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