Snowflake NodeJS 驱动程序 SELECT .... WHERE id IN (??) 子句

Jac*_*sky 5 node.js snowflake-cloud-data-platform

假设我有一个数字 ID 数组

let arr = [123, 456]
Run Code Online (Sandbox Code Playgroud)

现在,我想获取具有这些 ID 的所有记录

try{
    connection.execute({
    binds: [arr],
    sqlText: `
        SELECT DISTINCT name, id
        FROM my_table
        WHERE id IN (?)
    `,
    complete: (err, stmt, rows) => {
        // receive results
    }
});
Run Code Online (Sandbox Code Playgroud)

对于“arr”数组中的第一个 id,我只得到 1 列。我想获得与“arr”数组中的 id 匹配的所有行的结果

Gre*_*lik 2

这适用于 Snowflake 的 JavaScript 存储过程并演示如何绑定数组。它使用二维数组,因此可用于在 VALUES 子句中构造表。如果您愿意,可以修改它以与一维数组一起使用,并根据需要调整代码。

我还没有在 Node.js 中尝试过相同的方法,但我相信相同的方法也适用于 Node.js。如果没有的话我可以尝试调整一下。

create or replace procedure BIND_TEST()
returns string
language javascript
as
$$

// Defined as a two dimensional array to enable construction of a table in a VALUES clause
let arr = [[3, 23, 24]];

let binds = arr.reduce((a, b) => a.concat(b));
let cols = arr[0].map(()=>"?").join(",");
let placeholders = arr.map(()=>"(" + cols + ")").join(",");
let sql = `
        SELECT DISTINCT N_NAME, N_REGIONKEY
        FROM "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1000"."NATION"
        WHERE N_NATIONKEY IN ${placeholders}`;
let cmd = {sqlText: sql, binds: binds};

var stmt = snowflake.createStatement(
   {
   sqlText: sql,
   binds: binds
   }
);

let rs = stmt.execute();

let out = "";

while(rs.next()) {
    if (out != "") out += ",";
    out += rs.getColumnValue("N_NAME");
}

return out;

$$;

call bind_test();
Run Code Online (Sandbox Code Playgroud)