Этот вопрос будет намного легче ответить, если бы был представлен полный пример предполагаемого кода, а не только его часть, но я думаю, что я достаточно разбираюсь в том, чтобы направлять его в правильном направлении.
Да, с помощью SQLCLR можно получить данные из внешних источников, таких как веб-службы и т. Д. Вы можете написать специализированные скалярные или табличные функции для вызова определенных методов и возврата обработанного вывода. Или вы можете создать универсальную функцию, которая возвращает полученный XML, а затем проанализирует это в T-SQL.
Если вам нужно выполнить несколько шагов, вы можете вызвать эту функцию SQLCLR из T-SQL многозначной табличной функции. Это даже дает вам возможность передавать параметры.
Вашего программное обеспечение «который может читать только из таблиц или представлений» должны быть в состоянии SELECT
из этого Multistatement Таблица функции (ТВФ), поскольку она действует как View, который можно передать параметры в. Если ваше программное обеспечение по какой-либо причине не может выбрать из TVF, вы можете обернуть SELECT field1, field2, ... FROM dbo.MyTVF();
в View
.
Как именно вы пишете такую функцию SQLCLR для вызова веб-службы? Не так быстро. Если вы задаете этот вопрос в первую очередь, тогда код копирования и вставки такого рода в проект может принести больше вреда, чем пользы. Да, на разных сайтах, возможно даже здесь, есть несколько примеров вызова веб-службы в функции или процедуре SQLCLR, но некоторые (возможно, даже большинство?) Выполняются очень плохо. Даже если у вас есть опыт программирования .NET, существует немало нюансов для CLR-сервера SQL Server, о которых вам нужно знать. Таким образом, вы действительно не должны писать код SQLCLR, не понимая вначале ограничений среды и как правильно взаимодействовать с SQL Server. Чтобы помочь в этом, я начал писать серию на SQL Server Central: Stairway to SQLCLR (требуется бесплатная регистрация).
Я также отметить, что для тех, кто заинтересован в заходящих URI, но не желают или не в состоянии писать код, чтобы сделать это, есть табличное значение Функция называется INET_GetWebPages в библиотеке SQL# SQLCLR, что делает это. Полное раскрытие: я являюсь автором SQL #, и, хотя есть бесплатная версия, функция INET_GetWebPages доступна только в полной версии.
да вы можете передать параметр вместо 'data_identificator' – wiretext
А как? Пожалуйста, укажите мне, как я могу это сделать? – VikciaR
Невозможно сделать это в представлении, но можете ли вы вызвать функцию? –