Как сохранить SQL-запрос фабрики данных с параметрами в БД SQL, а затем вызвать его из конвейера

#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. Но почему это не работает с интерполяцией строк?