使用 SQL 服务器和 MyBatis 批处理 "insert if missing"

Batch "insert if missing" with SQL server and MyBatis

我有一个整数列表,我想将其(批量)插入到具有单个整数列的 SQL 服务器 table 中。

问题是正在插入的某些值可能已经存在于 table 中。有没有一种方法可以将批处理 "insert if missing" 执行到 Sql 服务器和 MyBatis 中?

以下映射器对我有用:

<insert id="batchAddIntegers" parameterType="java.util.List">
    DECLARE @ValuesToInsertTempTable TABLE (ColumnName integer)
    DECLARE @UpdateVariable integer

    SET NOCOUNT ON

    INSERT INTO @ValuesToInsertTempTable (ColumnName) VALUES
    <foreach item="item" index="index" collection="list" open="(" separator="),(" close=")">
        #{item}
    </foreach>

    SET NOCOUNT OFF

    MERGE TargetTable
    USING @ValuesToInsertTempTable AS S
    ON  TargetTable.ColumnName=S.ColumnName
    WHEN NOT MATCHED THEN
        INSERT (ColumnName) VALUES (S.ColumnName)
    WHEN MATCHED THEN
        UPDATE SET @UpdateVariable = @UpdateVariable + 1;
</insert>