diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastBuilder.cs index 67291446c..39c439407 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastBuilder.cs @@ -48,12 +48,12 @@ namespace SqlSugar dt.TableName = "#temp"; } - public async virtual Task Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List datas) where T : class, new() + public async virtual Task Merge(string tableName,DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List datas) where T : class, new() { var result = 0; await this.Context.Utilities.PageEachAsync(datas,2000,async pageItems => { - var x = await this.Context.Storageable(pageItems).WhereColumns(whereColumns).ToStorageAsync(); + var x = await this.Context.Storageable(pageItems).As(tableName).WhereColumns(whereColumns).ToStorageAsync(); result += await x.BulkCopyAsync(); result += await x.BulkUpdateAsync(updateColumns); return result; diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs index fde3abf74..bf68a0b89 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs @@ -222,7 +222,7 @@ namespace SqlSugar await buider.CreateTempAsync(dt); await buider.ExecuteBulkCopyAsync(dt); } - var result = await buider.Merge(dt, this.entityInfo,whereColumns,updateColumns, datas); + var result = await buider.Merge(GetTableName(),dt, this.entityInfo,whereColumns,updateColumns, datas); //var queryTemp = this.context.Queryable().AS(dt.TableName).ToList();//test //var result = await buider.UpdateByTempAsync(GetTableName(), dt.TableName, updateColumns, whereColumns); if (buider?.DbFastestProperties?.IsMerge == true&&this.context.CurrentConnectionConfig.DbType != DbType.Sqlite) diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/IFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Interface/IFastBuilder.cs index d1e0d17a4..ff4bc2200 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/IFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/IFastBuilder.cs @@ -18,6 +18,6 @@ namespace SqlSugar Task ExecuteBulkCopyAsync(DataTable dt); Task CreateTempAsync(DataTable dt) where T : class, new(); void CloseDb(); - Task Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List datas) where T : class, new(); + Task Merge(string tableName,DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List datas) where T : class, new(); } } diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/Oracle/SqlBuilder/OracleFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Realization/Oracle/SqlBuilder/OracleFastBuilder.cs index 15df171e4..d0fd619f7 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/Oracle/SqlBuilder/OracleFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/Oracle/SqlBuilder/OracleFastBuilder.cs @@ -71,7 +71,7 @@ namespace SqlSugar } - public override Task Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List datas) where T : class + public override Task Merge(string tableName, DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns,List datas) where T : class { Check.Exception(this.entityInfo.Columns.Any(it => it.OracleSequenceName.HasValue()), "The BulkMerge method cannot be used for sequence", "BulkMerge方法不能用序列"); var sqlBuilder = this.Context.Queryable().SqlBuilder; @@ -86,7 +86,7 @@ namespace SqlSugar var updateColumnsSql = string.Join(" , ", updateColumns.Select(it => $"tgt.{sqlBuilder.GetTranslationColumnName(it)}=src.{sqlBuilder.GetTranslationColumnName(it)}")); var insertColumnsSqlTgt =string.Join(" , ", insertColumns.Select(it=>"tgt."+ 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 + var sql = $@"MERGE INTO {sqlBuilder.GetTranslationColumnName(tableName)} tgt USING {sqlBuilder.GetTranslationColumnName(dt.TableName)} src ON ({whereSql}) WHEN MATCHED THEN diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs index 2441caa3e..4192e6a11 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs @@ -67,7 +67,7 @@ namespace SqlSugar copy.BulkCopyTimeout = this.Context.Ado.CommandTimeOut; return copy; } - public override Task Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List datas) + public override Task Merge(string tableName,DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List datas) { var sqlBuilder = this.Context.Queryable().SqlBuilder; var insertColumns = entityInfo.Columns @@ -81,7 +81,7 @@ namespace SqlSugar 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 + var sql = $@"MERGE INTO {sqlBuilder.GetTranslationColumnName(tableName)} tgt USING {sqlBuilder.GetTranslationColumnName(dt.TableName)} src ON ({whereSql}) WHEN MATCHED THEN diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteFastBuilder.cs index 40030431d..15621538b 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteFastBuilder.cs @@ -176,12 +176,12 @@ namespace SqlSugar return result; } - public async Task Merge(DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List datas) where T : class, new() + public async Task Merge(string tableName,DataTable dt, EntityInfo entityInfo, string[] whereColumns, string[] updateColumns, List datas) where T : class, new() { var result = 0; await this.Context.Utilities.PageEachAsync(datas, 2000, async pageItems => { - var x = await this.Context.Storageable(pageItems).WhereColumns(whereColumns).ToStorageAsync(); + var x = await this.Context.Storageable(pageItems).As(tableName).WhereColumns(whereColumns).ToStorageAsync(); result += await x.BulkCopyAsync(); result += await x.BulkUpdateAsync(updateColumns); return result;