#azure-data-factory
#azure-data-factory
Вопрос:
У меня есть следующий sql-запрос с параметрами конвейера
SELECT * FROM @{pipeline().parameters.Table} WHERE
@{pipeline().parameters.KeyColumn} >
@{activity('LookupExistingKey').output.firstRow.KeyValue} AND
@{pipeline().parameters.KeyColumn} <=
@{activity('LoopupNewKey').output.firstRow.NewKeyValue}
Запрос хранится в базе данных, и в моем конвейере я пишу @pipeline.parameters .SelectSatement . Во время выполнения конвейер должен извлечь строку запроса из БД и выполнить ее.
Ошибка
Operation on target Copy data failed: Failure happened on 'Source' side.
'Type=System.Data.SqlClient.SqlException,Message=Must declare the scalar
variable "@pipeline".,Source=.Net SqlClient Data
Provider,SqlErrorNumber=137,Class=15,ErrorCode=-2146232060,State=2,Errors=
[{Class=15,Number=137,State=2,Message=Must declare the scalar variable
"@pipeline".,},],'
Я хотел бы сохранить запрос (с параметрами) в БД, а затем вызвать его динамически из моего конвейера. Но это не работает.
Есть идеи?
Комментарии:
1. Не могли бы вы предоставить фрагмент вашего конвейера и как вы вызываете оператор select?
Ответ №1:
При добавлении строкового значения с переменной или параметром используйте concat()
функцию в выражении для объединения обоих.
@concat('select * from ',pipeline().parameters.tablename, ' where ', pipeline().parameters.KeyColumn, ' = ', pipeline().parameters.KeyValue)
Комментарии:
1. ПРИВЕТ, спасибо за ваш ответ. Что делают запятые?
2. Привет, здесь запятая предназначена для разделения строки со значением параметра. Вы можете обратиться к этому документу для получения подробной информации об использовании.
3. Но почему это не работает с интерполяцией строк?