Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft.SqlServer.Management.Smo.Transfer类_C#_Sql_Sql Server 2008_Smo_Transfer - Fatal编程技术网

C# Microsoft.SqlServer.Management.Smo.Transfer类

C# Microsoft.SqlServer.Management.Smo.Transfer类,c#,sql,sql-server-2008,smo,transfer,C#,Sql,Sql Server 2008,Smo,Transfer,我正在尝试使用Smo.Transfer类在服务器之间复制sql db 当您复制完全正常的数据库时,这是正常的。它起作用了 但如果您的数据不一致怎么办? 例如,我有一个函数,它从一个表和不存在的列中获取值(有人重命名了该列,现在该函数无法工作)。但是,如果您尝试生成脚本,它将正常生成 但是当您实际尝试运行此脚本时,问题就开始了。Sql server不允许您创建函数,因为它不能引用不存在的列 当您实际运行.TransferData()方法时,Transfer类会发生类似的情况 问题是。是否可以完全跳

我正在尝试使用Smo.Transfer类在服务器之间复制sql db

当您复制完全正常的数据库时,这是正常的。它起作用了

但如果您的数据不一致怎么办? 例如,我有一个函数,它从一个表和不存在的列中获取值(有人重命名了该列,现在该函数无法工作)。但是,如果您尝试生成脚本,它将正常生成

但是当您实际尝试运行此脚本时,问题就开始了。Sql server不允许您创建函数,因为它不能引用不存在的列

当您实际运行.TransferData()方法时,Transfer类会发生类似的情况

问题是。是否可以完全跳过对象(在我们的示例中是函数)的创建


如何捕获错误、跳过对象并让.TransferData()方法继续它的工作?

我将首先采取修复损坏的依赖关系的方法。然后,我将采取一种旨在防止这些依赖关系在将来被破坏的方法。其效果是,您的传输代码将开始工作,并且可能其他代码或与db代码的交互也会工作得更好


要完成所有这些,您需要了解已断开的依赖关系。我在这附近有东西。如果我找到了,我会发回的。我在想也许是RedGate的依赖追踪2?正如我回忆的那样,就有用性而言,它仍然不在我的“范围”之内,但它仍然可以为您完成工作。

不可能阻止
TransferData
方法在第一次出错时停止。然而,有一个解决办法。相反,您可以生成sql脚本并立即执行它-在这种情况下,您可以在出现错误时强制它继续:

$Transfer.Options.ScriptBatchTerminator = $true
$ScriptFileName = $PSScriptRoot + '\\' + $DbName + '.sql'
$Transfer.Options.FileName = $ScriptFileName
$Transfer.Options.ToFileOnly = $true
$Transfer.EnumScriptTransfer()

Invoke-SqlCmd -InputFile $ScriptFileName -ServerInstance $SQLInstanceName -Database $TargetDbName -ErrorAction Continue
请记住将
选项.ScriptBatchTerminator
设置为true