在 SQL 语句之间的加载脚本中连接

Concat in loadscript between SQL statements

大家好,

这让我发疯。我将尝试连接一个 table 中的一些值,以便在另一个语句的 where 子句中使用它。就像这个脚本。

LIB CONNECT TO 'MSSQLSERVER';

TempTab:
Load KST;
SQL SELECT KST FROM vKST WHERE Region = 'Driver';

Let Test = Concat(distinct KST, ',');

drop Table TempTab;

// ...

LIB CONNECT TO 'ORACLESERVER';

Foo:
Load *;
SQL SELECT Value FROM KSTvalues WHERE KST IN ($(Test));

我的问题是变量“Test”仅计算为空。有人对此有想法吗?

在这种情况下,Concat 函数应该在 table 的上下文中使用,以便从字段中获取所有值。

因此,要获取所有值,您必须首先将它们加载到临时 table 中,然后在其中执行连接。然后使用变量获取结果字段值。

看看下面的脚本。连接在 TempTable 中执行,然后使用 peek 函数将 ConcatField 的值放入 vConcatValues 变量(我在最后删除 TempTable 因为它填充变量后不需要)

TempTable 会有以下内容:

vConcatValues 将是:

RawData:
Load * inline [
Values
Value1
Value1
Value2
Value3
Value4
Value5
];


TempTable:
Load
  Concat(distinct Values, ',') as ConcatField
Resident
  RawData
;

let vConcatValues = peek('ConcatField');

// We dont need the TempTable anymore and can be dropped
Drop Table TempTable;

P.S。 sql 子句可能会引发错误,因为值不会被定义为字符串。在这种情况下,您可以使用这样的东西:

TempTable:
Load
  Concat(distinct Values, '","') as ConcatField
Resident
  Raw
;

使用","作为分隔符会得到Value1","Value2","Value3","Value4", "Value5(见前面和最后缺少的"

我们必须稍微调整一下变量来解决这个问题:

let vConcatValues = '"' & peek('ConcatField') & '"';

然后结果将是:

"Value1","Value2","Value3","Value4", "Value5"