Если вы используете задачу потока данных и используете источник OLE DB, и вам необходимо параметризовать ваш запрос:
- Создать переменную для сохранения «полного» оператора запроса: щелкните правой кнопкой мыши пустую область за пределами пакета - и выберите Переменные:
Нажмите Добавить переменные в окне переменных:
Сделайте имя SQL_DTFLOW_FULL
или что-то, что вы можете легко понять. variable data type
- это STRING
- Создайте переменную (и), чтобы сохранить ваши параметры.
т. Е. Полный набор запросов Query:
SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter
В приведенном выше примере у меня есть только один параметр: @BookID, поэтому мне нужно создать одну переменную для сохранения моего параметра. Добавление дополнительных переменных зависит от ваших запросов.
Дайте ему имя SQL_DTFLOW_BOOKID
variable data type
является STRING
Итак, вам нужно сделать SSIS аккуратным, а переменные отсортированы по понятным частям.
Попробуйте сделать имя переменной SQL_{TASK NAME}_{VariableName}
- Создайте выражение для переменной
SQL_DTFLOW_FULL
, нажмите номер 1 и начните заполнять номер 2. Сделайте ваши операторы SQL правильными инструкциями SQL, используя строковый блок. Строковый блок обычно использует двойную кавычку в начале и в конце. Объедините переменные со строковым блоком.
Нажмите «Оценить выражение», чтобы показать результат, чтобы убедиться, что ваш запрос верный, скопируйте и вставьте результат запроса в SSMS.
Убедитесь, что переменные свободны от SQL-инъекций, используя вашу собственную логику. (Используйте свой инстинкт разработчика)
- Откройте задачу потока данных, откройте редактор источников OLE DB, дважды щелкнув элемент.
- Выберите режим доступа к данным:
SQL Command From Variable
- Выберите имя переменной:
SQL_DTFLOW_FULL
- Нажмите Предварительный просмотр, чтобы убедиться, что он работает.
Вот и все, мой способ предотвратить случай сбоя служб SSIS. Поскольку я использую этот способ, у меня никогда не возникало этой проблемы, знаете ли, SSIS что-то странное.
Чтобы изменить значение переменной, установите его перед задачей потока данных, результат SQL переменной SQL_DTFLOW_FULL
будет меняться при каждом изменении значения переменной.