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 语句