我正在尝试使用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”没有得到解决。我现在不确定如何继续。
使用 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 <>;"