无法在 ADF 中使用动态日期时间变量运行查询

问题描述 投票:0回答:1

我为管道创建了 2 个变量,如下所示:

我正在尝试在复制数据活动中运行以下增量查询

    @concat('
SELECT 
    *
FROM 
   [',variables('schema'),'].[',if(variables('custom_table_list_flag'),item(),item().name),'] 
WHERE 
    UPDATE_DATE >  [', variables('startdate'), '] 
    AND UPDATE_DATE <= [', variables('currentdate'), ']')

但是,我在运行管道时遇到以下错误:

“源”端发生故障。 错误代码=SqlOperationFailed,'类型=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,消息=A 数据库操作失败并出现以下错误:“语法不正确 靠近 ')'.',Source=,''Type=System.Data.SqlClient.SqlException,Message=不正确 ')'附近的语法。,来源=.Net SqlClient Data 提供程序,SqlErrorNumber=102,类=15,错误代码=-2146232060,状态=1,错误=[{类=15,编号=102,状态=1,消息=不正确 ')' 附近的语法.,},],'

azure-data-factory
1个回答
0
投票

此错误是因为您在查询中给出的表达式错误。为了使其成功,您需要在管道中进行一些更改。以下是这些变化。

  • 您无法将 ADF 表达式作为默认值分配给变量
    currentDate
    。要将表达式分配给该变量,请添加
    set variable activity
    。通过单击
    add dynamic content
    定义表达式。

表达方式:

@formatDateTime(utcNow(),'yyyy-MM-dd')

  • Startdate
    变量给出的表达式也是无效的 ADF 表达式。通过单击“值”文本框中的“添加动态内容”,应将正确的表达式指定为
    @adddays(variables('currentDate'),-1)

  • 您可以在 ADF 中使用字符串插值,而不是使用
    @concat()
    来构成 SQL 脚本。下面是正确的表达方式。
SELECT * FROM 
['@{variables('schema')}'].['@{if(variables('custom_table_list_flag'),item(),item().name)}'] 
WHERE  UPDATE_DATE >  '@{ variables('startdate')} ']
    AND UPDATE_DATE <= '@{ variables('currentdate')}'
© www.soinside.com 2019 - 2024. All rights reserved.