SQL integration services выполнение сценария C#

95
10 августа 2019, 09:30

Пытаюсь освоить SSIS. В проекте Integration services добавить сценарий на C#, который принимает на вход строку,и выдает результат. Задача: необходимо из SQL запустить пакет SSIS, на вход скормить ему параметр "строка", и получить ответ. Если это возможно, то как это сделать? Гугление никаких результатов не принесло, кроме как скрипта запуска из SSMS, но без параметров. Прошу помощи.

Answer 1

SSIS - это не самый подходящий инструмент для вашей задачи, насколько ее понял. Основной сценарий использования SSIS - постучаться в источник, в вашем примере - WSDL, забрать данные, что-то с ними сделать и положить в БД. В качестве БД может быть сама БД, текстовый файл или Excel. И еще замечание - SSIS - инструмент пакетной обработки, сформировать ответ в конце работы он может лишь как файл или запись в БД, но не значение в stdout.

Лучше всего создать свой сервер приложений. Но если у вас столь жестко задано ограничение на "неумножение сущностей" MS SQL - попробуйте написать CLR сборку на C#, которая будет ходить к Web сервису. Можно воспользоваться не менее "старым" способом с MSXML - на SO есть обсуждение

Answer 2

В итоге решил проблему написанием CLR для SQL сервера. Столкнулся с проблемой, когда добавляешь ссылку на WCF не WebReference Framework 2.0. При добавлении этой сборки в SQL, сервер требует добавить библиотеки .NET, но там получаем мы кучу ошибок при добавлении сборок. И еще проблема, что External_ACCESS и UNSAFE сборки необходимо подписывать Asymetric KEY. Ниже небольшая инструкция.

  1. Т.к. в SQL Database Project для Visual Studio нет возможности добавить ссылку на веб-сервис, необходимо создать отдельную библиотеку классов.
  2. В созданной библиотеке классов добавляем ссылку на службу, в окошке нажимаем Дополнительно и нажимаем "Добавить веб-ссылку" (.NET Framework 2.0).
  3. Подписываем сборку сертификатом. И Собираем решение.
  4. На SQL сервер копируем нашу DLL. Создаем ассиметричный ключ:

    USE master;   
    GO    
    CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 
    'C:\MyDBApp\SQLCLRTest.dll'     
    CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey     
    GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;   
    GO
    
  5. Добавляем сборку на SQL сервер:

    CREATE ASSEMBLY SQLCLRTest  
    FROM 'C:\MyDBApp\SQLCLRTest.dll'  
    WITH PERMISSION_SET = EXTERNAL_ACCESS; 
    
  6. Далее в SQL Database project создаем SQL CLR C# хранимую процедуру. Добавляем в нее нашу библиотеку. Пишем логику работы с этой библиотекой.
  7. И публикуем CLR на SQL сервере.

После этого вызываем процедуру на SQL сервере и получаем ответ от WCF службы.

READ ALSO
Visual Studio , C# , .Net установщик EXE

Visual Studio , C# , .Net установщик EXE

Возник вопрос, мы 4 года уже изучаем на парах C# , пишем небольшие программки, используем разные фреймворки и тд, но дело до доработки проектов...

102
Наблюдение за буфером обмена

Наблюдение за буфером обмена

Нужно, чтобы код, который проверяет буфер обмена, работал постоянноСейчас он у меня срабатывает только по нажатию на кнопку

117
PHP - удалить из строки HEX c2a00a

PHP - удалить из строки HEX c2a00a

Есть результат вывода строки через функцию bin2hex :

110