0
我有一個整數列表,我希望(批量)插入帶有單個整數列的SQL Server表中。使用SQL服務器和MyBatis批量「插入,如果丟失」
問題是,一些插入的值可能已經存在於表中。是否有一種方法可以在Sql Server和MyBatis中執行批量「如果丟失」?
我有一個整數列表,我希望(批量)插入帶有單個整數列的SQL Server表中。使用SQL服務器和MyBatis批量「插入,如果丟失」
問題是,一些插入的值可能已經存在於表中。是否有一種方法可以在Sql Server和MyBatis中執行批量「如果丟失」?
下映射爲我工作:
<insert id="batchAddIntegers" parameterType="java.util.List">
<choose>
<when test="list!=null and list.size() > 0">
DECLARE @ValuesToInsertTempTable TABLE (ColumnName integer)
DECLARE @UpdateVariable integer
INSERT INTO @ValuesToInsertTempTable (ColumnName) VALUES
<foreach item="item" index="index" collection="list" open="(" separator="),(" close=")">
#{item}
</foreach>
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;
</when>
</choose>
</insert>
注意,如果該列表不爲空,它至少包括一個元素映射器只執行查詢。如果您不需要這種行爲,只需刪除<choose>
和<when>
標籤。