9.3 连接序列中的成员

 

将序列中的成员连成一个字符串。
表 A 和表 B 的表结构相同,使用表 B 更新表 A。当表 B 的主键在表 A 中存在时更新记录,否则新增行。

表 A:

ID Amount
1 3063.0
2 3868.6
4 2713.5

表 B:

ID Amount
1 3063.0
2 4507.0
3 2713.5

函数 A.concat(d) 用分隔符 d 连接序列成员返回成字符串,@c 选项表示使用逗号连接。

脚本:

A
1 =connect(“db”)
2 =A1.query(“select COLUMN_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE k where k.TABLE_NAME=‘B’”)
3 =pks=A2.(COLUMN_NAME)
4 =A1.query@x(“select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS c where c.TABLE_NAME=‘B’”)
5 =columns=A4.(COLUMN_NAME)
6 =“MERGE INTO A as t USING B as s ON “+pks.(“t.”+~+”=s.”+~).concat("and “)+” WHEN MATCHED THEN UPDATE SET “+(columns\pks).(“t.” + ~ +”=s." + ~).concat@c()+"WHEN NOT MATCHED THEN INSERT VALUES(“+columns.(“s.”+ ~).concat@c()+”)"
7 =A1.excute(A6)

A1 连接数据库
A2 从系统表获取表的主键,每个数据库获取主键方式不同,这里以 MSSQL 为例
A3 定义变量 pks,是主键列名的序列
A4 检索表的所有列
A5 定义变量 columns,是列名的序列
A6 动态拼接 merge into 语句。其中使用了 A.concat 函数连接序列成员返回成字符串。
A7 执行 A6 拼成的 merge into 语句