簡體   English   中英

數據表批量復制到 SQL 服務器合並行 id

[英]Datatable bulk copy to SQL Server merge row id

我正在使用下面的代碼將數據表中的數據插入 SQL 服務器。 我的問題是是否有任何方法可以合並行。 如果 id 不存在插入,否則更新。

using (SqlTransaction transaction = connection.BeginTransaction())
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
{
    try
    {
        bulkCopy.DestinationTableName = TableName;
        bulkCopy.WriteToServer(dt);
        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
        return false;
    }
}

我強烈建議您將 EFC 用於此類事情,它很容易處理帶有偽對象的批量操作。 您可以在此處閱讀有關實體框架核心批量操作的信息: https://dotnetdetail.net/entity-framework-core-3-0-bulk-insert-update-and-delete/

具有 DataTable 值的表值參數可用於條件INSERTUPDATEMERGE語句。 創建與您的DataTable架構匹配的表類型,例如:

CREATE TYPE TvpType AS TABLE(
      ID int NOT NULL PRIMARY KEY
    , DataValue int
);

然后將DataTable作為SqlDbType.Structured類型的參數傳遞給MERGE語句:

string mergeStatement = @"
MERGE dbo.YourTable AS target
USING @TVP AS source ON source.ID = target.ID
WHEN MATCHED THEN UPDATE SET DataValue = source.DataValue
WHEN NOT MATCHED BY TARGET THEN INSERT (ID, DataValue) VALUES(source.ID, source.DataValue);";

try
{
    using (SqlCommand mergeCommand = new SqlCommand(mergeStatement, connection))
    {
        mergeCommand.Parameters.Add("@TVP", SqlDbType.Structured).Value = dt;
        mergeCommand.ExecuteNonQuery();
    }
}
catch
{
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM