ADF:将动态 Where 子句作为带引号的字符串传递

ADF: Pass dynamic Where Clause as a string with quotes

我有一个查找,从 SQL 服务器 table 中检索一些记录,其中包含服务器、数据库、架构、table 名称和整个 where 子句。这些值被传递给副本数据(在 ForEach 中)在副本数据中,我尝试使用两个不同的动态查询语句,但我似乎遇到了错误。并且不知道我哪里出错了。

table 中的值:

SRC_SERVERNAME SRC_DATABASE SRC_SCHEMANAME SRC_TABLENAME SRC_WHERE_DATE_CLAUSE
SQ01 NAV dbo Company$Sales Invoice Header where [Posting Date] >= '2021-01-01'

源设置:

语句 1 错误:

A database operation failed with the following error: 'Incorrect syntax near '.'.'
Incorrect syntax near '.'., SqlErrorNumber=102,Class=15,State=1,

语句 2 错误:

A database operation failed with the following error: 'Incorrect syntax near '.'.'
Incorrect syntax near '.'., SqlErrorNumber=102,Class=15,State=1,

语句 1(查询):

SELECT *  
FROM @{item().SRC_SERVERNAME}.@{item().SRC_DATABASENAME}.@{item().SRC_SCHEMANAME}.@{item().SRC_TABLENAME},' ',@{item().SRC_WHERE_DATE_CLAUSE}

语句 2(带 concat 的动态查询):

@concat('select * from ',item().SRC_SERVERNAME,'.',item().SRC_DATABASENAME,'.',item().SRC_SCHEMANAME,'.',item().SRC_TABLENAME,' ',item().SRC_WHERE_DATE_CLAUSE)

您的查询中存在语法错误。

  • 在SQL数据库的4部分命名中,服务器name/databasename/schemaname/table名称应该用分隔‘.’.

  • 如果 server/database/schema/table 的名称中有 space 或其他特殊字符,则应将它们嵌入方括号 [].

    @concat('select * from [',item().SRC_SERVERNAME, '].[',item().SRC_DATABASENAME,'].[',item().SRC_SCHEMANAME,'].[',item().SRC_TABLENAME, '] ',item().SRC_WHERE_DATE_CLAUSE)