在合并sql语句中使用表值参数

问题描述 投票:0回答:1

我正在尝试使用sql server的MERGE命令。但是,我不确定我们如何使用 Java 将其作为参数传递。

我将 SqlParamSource 设置为

private SqlParameterSource getSqlParamsForPollingLogUpdateWithMerge(int[] ids){
        final MapSqlParameterSource params = new MapSqlParameterSource();
        try{
            SQLServerDataTable table = new SQLServerDataTable();
            table.addColumnMetadata("id",java.sql.Types.INTEGER);
            table.setTvpName("dbo.idtable");
            for (int id : ids) {
                table.addRow(id);
            }

            params.addValue("idtable", table);
            return params;
        }catch (Exception ex){
            throw new RuntimeException(ex);
        }

    }

我的sql看起来像:

String sql= "create type dbo.idtable AS TABLE (id INT);" +
                        "MERGE INTO table1 AS tgt" +
                "USING :idtable as src\n" +
                "ON tgt.id=src.id" +
                "WHEN MATCHED THEN" +
                "UPDATE SET ...<fewupdates here>" +
                "WHEN NOT MATCHED THEN" +
                "INSERT <inserts here>;";

我面临的问题是数据类型“dbo.idtable”没有得到解决。我现在不确定如何继续。

java sql-server table-valued-parameters
1个回答
0
投票

使用 OpenJson 对我有用。这就是 sql 现在的样子。 :json 是具有多个 json 记录且具有一个 id key 的 json 数组。

 "MERGE INTO table1 AS tgt \n" +
                "USING openjson(:json) with (id int '$.id') as src \n" +
                "ON tgt.id=src.id " +
                "WHEN MATCHED THEN " +
                "UPDATE SET <> " +
                "WHEN NOT MATCHED THEN " +
                "INSERT <>;"
© www.soinside.com 2019 - 2024. All rights reserved.