带单引号的 ADF 数据流连接表达式

ADF data flow concat expression with single quote

我需要使用 Azure 数据流表达式生成器生成一个 SQL 字符串,但它不允许我使用 Concat 函数在我的字符串之间添加单引号

我需要一个 SQL 字符串如下

SELECT * FROM ABC WHERE myDate <= '2019-10-10'

这里 2019-10-10 来自一个参数,所以我构建的表达式如下所示

concat('SELECT * FROM ABC WHERE myDate >=','''',$ToDate,'''')

但是上面的语句无法解析表达式。

这可以使用数据工厂表达式轻松实现,但不能使用 Azure 数据流表达式。

今天,你可以这样做:

'select * from saleslt.product where myDate >= \'' + $ToDate + '\''

基本上,只需使用带有转义单引号的 +。

我们将在下周发布一项新的字符串插值功能,以简化此操作。任何表达式、列或参数都可以在双引号内使用。

您的示例将如下所示:

"SELECT * FROM ABC WHERE myDate >='{$ToDate}'"

容易多了。下周该功能准备就绪后,我会发布公告。

我打电话给 Azure 支持,他们告诉我使用波纹管表达式可以帮助我们向列或数据添加单引号:

toString('\''+ toString(byName('col2'))+ '\'')

所以你的表达应该是:

concat('SELECT * FROM ABC WHERE myDate >=',toString('\''+ toString(byName('$ToDate'))+ '\'') )

我在日期类型 column2 中进行了测试,效果很好。

希望对您有所帮助。

经过大量的尝试和实验, 我有一个解决方案,使用''(一个额外的引号)而不是'。它会起作用。 例如。

@concat('Select batchid from execution_Log where Execution_status=''Success'' and Hierachy_ID = ', pipeline().parameters.Hierachy_ID)

我在这方面也遇到了很多麻烦,试图传递 2 个带有引号的时间戳变量。大量的跟踪和错误,我能够使用字符串插值来实现它。表达式最终为:

"SELECT c.data.user_id ... FROM c WHERE c.data.date > '{toString($StartTime)}' AND c.data.date <= '{toString($EndTime)}'"

可以在参数两边加4个逗号来指定。当您传递 SQL 查询且参数为字符串格式时,这将适用。

@concat('SELECT * FROM DW_DEV.Schema_Name.DEMO_CONFIG WHERE SOURCESYSTEM = ','''',pipeline().parameters.SourceSystem,'''')