Как передать значение системной переменной в инструкцию SQL в задаче "выполнение SQL"?
SSIS 2008. Очень простая задача. Я хочу получить системную переменную и использовать ее в SQL INSERT. Я хочу получить значение System:MachineName
и используйте его в инструкции insert.
используя оператор INSERT INTO MYLOG (COL1) SELECT @[System::MachineName]
выдает ошибку Error: ..failed to parse. Must declare the scalar variable "@"
использование операторов SELECT @System::MachineName
или SELECT @@[System::MachineName]
выдает ошибку 'Error Incorrect systax near '::'
Я не пытаюсь передать параметр в запрос. Я уже искал, но не нашел как сделать это одна простая вещь!
4 ответов
вот один из способов вы можете сделать это. Следующий пример пакета был создан с помощью SSIS 2008 R2
и использует SQL Server 2008 R2 в качестве бэкэнда.
- создайте пример таблицы в базе данных SQLServer с именем
dbo.PackageData
- создайте пакет служб SSIS.
- в службах SSIS добавьте диспетчер соединений OLE DB с именем
SQLServer
чтобы подключиться к базе данных, скажите SQL Server база данных. - на вкладке поток управления, перетащите
Execute SQL Task
- дважды щелкните по задаче "выполнение SQL", чтобы вызвать редактор задач "выполнение SQL".
- на
General
вкладка редактора, установитеConnection
свойство диспетчера соединений с именем SQLServer. - в собственность
SQLStatement
, введите инструкцию insertINSERT INTO dbo.PackageData (PackageName) VALUES (?)
- на вкладке сопоставление параметров щелкните Кнопка Добавить, выберите переменную пакета, которую вы хотите использовать. Измените тип данных. Этот пример собирается вставить имя пакета в таблицу, поэтому
Data Type
будетVARCHAR
. УстановитеParameter
название0
, который указывает значение индекса параметра. Нажмите кнопку ОК.
- выполнить пакет.
- вы увидите новую запись в таблицу. Я сохранил имя пакета как Package. Вот почему стол
надеюсь, это поможет.
Я никогда не использую его раньше, но, возможно, вы можете проверить использование выражения в выполнении задачи SQL для этого.
или просто поместите весь запрос в выражение переменной с evaluateAsExpression, установленным в true. Затем используйте OLE DB, чтобы вставить
в моем комментарии к ответу @ZERO (повторяется здесь как ответ, поэтому его не упускают новички SSIS).
вопрос OP в значительной степени является вариантом использования для выражений свойств SSIS.
чтобы передать переменные SSIS в строку запроса, ее нужно объединить в набор выражений для свойства SqlStatementSource:
"INSERT INTO MYLOG (COL1) SELECT " + @[System::MachineName]
Это не означает, что принятый ответ не является хорошим шаблоном, как в целом, параметризованный подход безопаснее (против SQL-инъекции) и быстрее (при повторном использовании), чем прямое манипулирование строками запроса. Но для системной переменной (в отличие от введенной пользователем строки) это решение должно быть безопасным от SQL-инъекции, и это будет примерно так же быстро или быстрее, чем параметризованный запрос, если он будет повторно использован (поскольку имя машины не меняется).
вместе с ответом @user756519, в зависимости от строки подключения, имена переменных и Sqlstatementsource изменяется