【问题标题】:Using SMO to copy data only仅使用 SMO 复制数据
【发布时间】: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


【解决方案1】:

我需要更改目标数据库排序规则。

ALTER DATABASE [mydatabase] 
SET   SINGLE_USER
WITH  ROLLBACK IMMEDIATE
Go
ALTER DATABASE [mydatabase] COLLATE SQL_Latin1_General_CP1_CI_AI
Go
ALTER DATABASE [mydatabase] 
SET   MULTI_USER

【讨论】:

    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多