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



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

问题是,表中可能已经存在要插入的某些值。有没有一种方法可以在SqlServer和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>

最新更新