【发布时间】:2021-05-11 17:05:39
【问题描述】:
我正在尝试使用 SMO 仅复制数据,但在处理数据时出错
Microsoft.SqlServer.Management.Common.TransferException:传输数据时出错。有关详细信息,请参阅内部异常。
---> System.InvalidOperationException: 源列 'ID' 的区域设置 id '1033' 和目标列 'ID' 的区域设置 id '1036' 不匹配。
在 Microsoft.Data.SqlClient.SqlBulkCopy.AnalyzeTargetAndCreateUpdateBulkCommand(BulkCopySimpleResultSet internalResults)
在 Microsoft.Data.SqlClient.SqlBulkCopy.WriteToServerInternalRestContinuedAsync(BulkCopySimpleResultSet internalResults,CancellationToken cts,TaskCompletionSource1 source) at Microsoft.Data.SqlClient.SqlBulkCopy.WriteToServerInternalRestAsync(CancellationToken cts, TaskCompletionSource1 源)
在 Microsoft.Data.SqlClient.SqlBulkCopy.WriteToServerInternalAsync(CancellationToken ctoken)
在 Microsoft.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServerAsync(Int32 columnCount,CancellationToken ctoken)
在 Microsoft.Data.SqlClient.SqlBulkCopy.WriteToServer(DbDataReader 阅读器)
在 Microsoft.SqlServer.Management.Smo.Transfer.SqlBulkCopyData(SqlConnection sourceConnection,SqlConnection destinationConnection,TransferWriter writer,SqlTransaction 事务)
在 Microsoft.SqlServer.Management.Smo.Transfer.TransferData()
--- 内部异常堆栈跟踪结束 ---
在 Microsoft.SqlServer.Management.Smo.Transfer.TransferData()
在 D:\Source\atlas-cli\src\Commands\CopyDataCommand.cs:line 114 中的 AtlasCLI.Commands.CopyDataCommand.CopyAllTablesData(CatalogSourceEndpoint 源,CatalogDestinationEndpoint 目的地)
你可以在这里找到我的设置:
var transfer = new Transfer(sourceServer.Databases[sourceConnection.Database])
{
Options =
{
WithDependencies = true,
ContinueScriptingOnError = true,
AllowSystemObjects = true,
Indexes = true,
IncludeIfNotExists = true,
DriAll = true,
SchemaQualify = true,
ScriptSchema = false,
ScriptData = true
},
DestinationDatabase = destinationConnection.Database,
DestinationServer = destinationServer.Name,
DestinationLoginSecure = true,
CopySchema = false,
CopyData = true
};
transfer.DataTransferEvent += DataTransferEvent_Handler;
transfer.DiscoveryProgress += DiscoveryProgress_Handler;
transfer.ScriptingProgress += ScriptingProgressReport_Handler;
transfer.ScriptingError += ScriptingErrorReport_Handler;
transfer.TransferData();
【问题讨论】:
-
确保您的目标数据库没有继承您没有预料到的默认语言环境 ID。如果此语言环境更改问题出乎意料,您可能继承了您未曾预料到的默认设置。因为您没有明确设置区域设置 ID,所以默认感冒开始了。
-
从每个 DB 中编写 Table DDL 文件的脚本可能会显示您没想到的与语言环境和排序规则相关的设置
-
@SqlSurfer 如何检查数据库区域设置?
-
@SqlSurfer 我的源目标排序规则值不同。
标签: c# sql-server smo