使用 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>
我有一个整数列表,我想将其(批量)插入到具有单个整数列的 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>