powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Параметризовать в функции название связанного сервера
5 сообщений из 30, страница 2 из 2
Параметризовать в функции название связанного сервера
    #40013650
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
create or alter function [dbo].[fnLS_ID] (
      @srv sysname, 
      @db sysname
)
returns @tbl table ([id] int) 
as begin
	declare @sConnectionString varchar(150) = 'Provider=SQLOLEDB;Server=(local);Database=test;Integrated Security=SSPI;'
	declare
			@cn int,
			@hResult int,
			@sErrorSource varchar(255),
			@sErrorDesc varchar(255),
			@sSQL varchar(8000),
			@rs int,
			@xmlDoc int,
			@xml_data varchar(8000),
			@xml xml

	--	**********************************
	set @sSQL = 'select f from ' + quotename(@srv) + '.' + quotename(@db) + '.[dbo].[test]';

	exec @hResult = sp_OACreate 'ADODB.Connection', @cn out;
	exec @hResult = sp_OACreate 'MSXML2.DOMDocument', @xmlDoc out;

	exec @hResult = sp_OAMethod @cn, 'Open', null, @sConnectionString;

	exec @hResult = sp_OAMethod @cn, 'Execute', @rs out, @sSQL;
	exec @hResult = sp_OAMethod @rs, 'Save', null, @xmlDoc, 1;

	exec @hResult = sp_OAMethod @xmlDoc, 'xml', @xml_data out;

	set @xml = cast(@xml_data as xml)

	insert into @tbl (id)
	select
		x.c.value('@f', 'int')
	from @xml.nodes('xml/*:data/*:row') as x(c)

	--
	exec @hResult = sp_OAMethod @cn, 'Close';
	exec @hResult = sp_OADestroy @xmlDoc;
	exec @hResult = sp_OADestroy @rs;
	exec @hResult = sp_OADestroy @cn;

	--
	return;
end;


"да", - тут "всё плохо" :)
начиная с @xml_data varchar( 8000 ) (можно "решить" циклом по рекордсету, отказавшись от xml)
и заканчивая правами коннекта на ЛС
просто считайте это "иллюстрацией" принципиальной возможности "хотелки"
...
Рейтинг: 0 / 0
Параметризовать в функции название связанного сервера
    #40014054
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
Mtgktem
"сделайте полное окружение, идентичное "боевому"."

SIMPLicity_, Вы что издеваетесь, ради того, чтобы сохранить несколько функций наустанавливать кучу МССкулей, Ораклов, Фаербердов, и... шайтан его знает каких еще серверов-источников данных??
Человека, который ясно видит цель, такие мелочи не остановят.
Слабые же духом наверняка задумаются, зачем им беременеть себе мозг с такими функциями, особенно если в обмене данными между системами все уже давно украдено без таких геморроев.


Окей!
Возвращаемся в 1994 год. Вспоминаем "как бы объектное" программирование.
Пишем свой обработчик входящего JSON-a: {Таблица:..., Формат:...., Действие:...., Данные:"<тута, ка ни стронно, ещё один JSON обо Ваши данные НЕформализованы по условию задачи>"}
Обработчик вешаем слушать порт (либо напрямую либо прикручиваем к nginx-у) и пишем для него .ini-шку для подключения к нужному нам в данным момент скуль-серверу. Все "потоки данных" как хочут ломятся на сервис (гадят в означенный порт,- удачно или не очень) и отправляют свои данные в Ваше хоронилище. При необходимости проектируете распределённую систему.

Такой вариант, кстати, работает.


В общем-то web-технологии в общем целом Вашу задачу решили, и уже давно.

PS использование xml вместо JSON эту конструкцию формализует
...
Рейтинг: 0 / 0
Параметризовать в функции название связанного сервера
    #40014056
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Гавриленко Сергей Алексеевич
Ржу в голос, простите. То, как они это реализовали, даже к красоте не имеют отношения: скорее маркетологическая галочка в фичах. В целом, абсолютно унылая неработоспособная хрень в большинстве сценариев.

не соглашусь с Вами, в целом LS достаточно жизнеспособна, особенно когда мапятся mssql <=> mssql.
про коммуникацию к другим СУБД, согласен приходится танцевать с бубнами.

Mtgktem,

еще раз вопрос: че вы привязались именно к TVF? хотите более менее нормально выстроить ломанную логику используйте хранимые процедуры, нахрена вам именно табличные функции?


Поддерживаю. Линкованные сервера MSSQL-MSSQL рулят. Не всё хорошо и гладко, но решает много-много проблем.
...
Рейтинг: 0 / 0
Параметризовать в функции название связанного сервера
    #40014077
Mtgktem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SIMPLicity_ , это верно, старые дедовские методы работают, проверено, надежно и понятно. И много чего "оттуда" используется и сейчас. Почти как некоторые устройства советских времен, исправные до сих пор - с толстыми проводами, качественным металлом, надежной конструкции, с понятной схемой и инструкцией починки.

Но в данном случае задача другая.
Никакой из источников данных сам не будет в меня бросаться ни xml-линами ни json-нами, если его не окучить особым образом. А окучивать каждый источник никто не будет. С точки зрения технологий, кроме разрешения прав доступа, источники данных и не должны ничего обрабатывать или отдавать xml и вообще ничего знать об этом. В принципе, связанные сервера задачу забора данных (а не передачи! и не взаимодействия!) успешно решают, просто использование и разработка были бы в разы удобнее, если несколько формализовать это дело. Например, создав табличку с динамическим добавлением и удалением из нее источника данных.
...
Рейтинг: 0 / 0
Параметризовать в функции название связанного сервера
    #40014082
Mtgktem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторче вы привязались именно к TVF?
я уже писал об этом
потому что уже существуют "некие глобальные хранимые" - недотроги , от которых все и крутится, вызывающие себе функции с возвратом таблиц данных с разных источников, вот они вполне очень трогательные .

Так вот. Не надо ржать.
Задачу решили сделать так, может и неожиданно, но вариант. И он тоже является в какой-то мере надежным и простым дедовским способом:

ЦЛР решено не делать.

Раз уж всё равно всё, что этим прожехом связано - работает исключительно на скриптах и перед запуском скриптов всё равно все скрипты проходят некий свой собственный препроцессор, его решили настроить так, что при отработке (в целом редкого) события "добавить новый источник данных" препроцессор каждый раз будет создавать уникальную функцию для получения данных из него. А в общую функцию получения данных из источников в нужное место вставляться код с вызовом этой уникальной функции.
Минусы есть, но не критичные.

Всё.

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


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