Sql server SMO.Transfer:无法转换类型";“数据库”;输入“;“数据库”;

Sql server SMO.Transfer:无法转换类型";“数据库”;输入“;“数据库”;,sql-server,powershell,smo,server.transfer,Sql Server,Powershell,Smo,Server.transfer,以下是powershell脚本: [string] $server = "devserver\mssql"; # SQL Server Instance [string] $database = "ftg"; # Database with the tables to script out. [string] $folder = "d:\FT\FTProject\"; # Path to export to [string] $SQLLogi

以下是powershell脚本:

[string] $server   = "devserver\mssql";          # SQL Server Instance
[string] $database = "ftg";      # Database with the tables to script out.
[string] $folder   = "d:\FT\FTProject\";          # Path to export to
[string] $SQLLogin = "Sa";
[string] $SQLPass  = "Sa1234";

# Reference to SMO
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO');

Write-Output ((Get-Date -format yyyy-MM-dd_HH-mm-ss) + ": Started ...");

$con = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($server, $SQLLogin, $SQLPass);
$srv = New-Object Microsoft.SqlServer.Management.SMO.Server($con);
$db = New-Object Microsoft.SqlServer.Management.SMO.Database($srv, $database);


#Use SMO Transfer Class by specifying source database
#you can specify properties you want either brought over or excluded, when the copy happens
$ObjTransfer   = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Transfer;
$ObjTransfer.Database = $db
最后一行出现错误:

异常设置“数据库”:“无法将类型为“Microsoft.SqlServer.Management.Smo.Database”的“[ftg]”值转换为类型为“Microsoft.SqlServer.Managem” ents.Smo.Database“ 位于D:\FT\FTProject\Setup\transfer.ps1:31 char:1 +$ObjTransfer.Database=[Microsoft.SqlServer.Management.SMO.Database]$db + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:NotSpecified:(:)[],SetValueInvocationException +FullyQualifiedErrorId:设置时的例外情况

我还尝试设置$db,如下所示:

$db = $srv.Databases[$database]
有什么问题吗?

请尝试以下操作:

$db = $srv.Databases[$database]
...
$ObjTransfer = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Transfer -ArgumentList $db
这将使用
$db
作为源数据库创建传输对象


我认为这是因为加载了不同版本的Microsoft.SqlServer.Smo.dll和Microsoft.SqlServer.SmoExtended.dll

当我在10个版本中加载第一个程序集,在12个版本中加载另一个程序集时,我得到了相同的错误

当我在同一个版本中显式地加载它们时,一切都很好

Add-Type -path "C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll"

Add-Type -path "C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.SmoExtended\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.SmoExtended.dll"

这也不行。出现错误:新对象:找不到“Transfer”的重载,参数计数为“1”。位于D:\FT\FTProject\Setup\transfer.ps1:25字符:18+$ObjTransfer=新对象-类型名Microsoft.SqlServer.Management.SMO.transfer…+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~CategoryInfo:InvalidOperation:(:)[New Object],MethodException+FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands。我还尝试从你的链接中导出一个示例-同样的错误也会发生。谢谢回答!不幸的是,我不能测试这个解决方案。)