mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2026-01-23 21:32:04 +08:00
SqlServer Merge
This commit is contained in:
@@ -66,6 +66,28 @@ namespace SqlSugar
|
||||
copy.BulkCopyTimeout = this.Context.Ado.CommandTimeOut;
|
||||
return copy;
|
||||
}
|
||||
public override Task<int> Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns)
|
||||
{
|
||||
var sqlBuilder = this.Context.Queryable<object>().SqlBuilder;
|
||||
var insertColumns = entityInfo.Columns
|
||||
.Where(it => it.IsIgnore == false)
|
||||
.Where(it => it.IsIdentity == false)
|
||||
.Where(it => it.OracleSequenceName == null)
|
||||
.Where(it => it.IsOnlyIgnoreInsert == false);
|
||||
var whereSql = string.Join(" , ", whereColumns.Select(it => $"tgt.{sqlBuilder.GetTranslationColumnName(it)}=src.{sqlBuilder.GetTranslationColumnName(it)}"));
|
||||
var updateColumnsSql = string.Join(" , ", updateColumns.Select(it => $"tgt.{sqlBuilder.GetTranslationColumnName(it)}=src.{sqlBuilder.GetTranslationColumnName(it)}"));
|
||||
var insertColumnsSqlTgt = string.Join(" , ", insertColumns.Select(it => sqlBuilder.GetTranslationColumnName(it.DbColumnName)));
|
||||
var insertColumnsSqlsrc = string.Join(" , ", insertColumns.Select(it => "src." + sqlBuilder.GetTranslationColumnName(it.DbColumnName)));
|
||||
var sql = $@"MERGE INTO {sqlBuilder.GetTranslationColumnName(entityInfo.DbTableName)} tgt
|
||||
USING {sqlBuilder.GetTranslationColumnName(dt.TableName)} src
|
||||
ON ({whereSql})
|
||||
WHEN MATCHED THEN
|
||||
UPDATE SET {updateColumnsSql}
|
||||
WHEN NOT MATCHED THEN
|
||||
INSERT ({insertColumnsSqlTgt})
|
||||
VALUES ({insertColumnsSqlsrc});";
|
||||
|
||||
return this.Context.Ado.ExecuteCommandAsync(sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user