Собственный подход к инструменту
Для задачи «Выполнение SQL» есть возможность получить запрос непосредственно из файла.
Установите для SQLSourceType
значение File Connection
, а затем укажите диспетчер соединений с файлами в разделе FileConnection
.
![SQLSourceType = File Connection](https://i.stack.imgur.com/ai71K.png)
Имейте в виду, что, хотя это удобно, оно также созрело для тех, кто наращивает свои права. Если бы у меня был доступ к файлу, который ищет пакет служб SSIS, я мог бы добавить drop database
, создать нового пользователя и предоставить ему права SA и т. Д. - все, что может сделать учетная запись, запускающая пакет служб SSIS, может использовать злоумышленник. ,
Раскатать свой собственный подход
Если вы непреклонны перед чтением файла, добавьте две переменные в ваш пакет служб SSIS и укажите значения, подобные приведенным ниже
- User :: QueryPath -> String -> C: \ path \ to \ file.sql
- User :: QueryActual -> String -> SELECT 1;
Добавить задачу скрипта в пакет. Укажите в качестве переменной ReadOnly User :: QueryPath и укажите в качестве переменной ReadWrite User :: QueryActual
В пределах Main вам понадобится код, подобный следующему
string filePath = this.Dts.Variables["User::QueryPath"].Value.ToString();
this.Dts.Variables["User::QueryActual"].Value = System.IO.File.ReadAllText(filePath);
Суть вопроса System.IO.File.ReadAllText . Обратите внимание, что это не относится к проверке того, существует ли файл, есть ли у вас разрешение на доступ и т. Д. Это просто чтение файла с нуля (и также открытое для тех же проблем с инъекцией, что и вышеописанный метод - только так, как вы сами его поддерживаете). против тонких инженеров в Microsoft)