在PowerShell中通过SMO执行SQL脚本时出错

Rus*_*960 4 sql-server powershell smo

我有一些代码将脚本加载到变量,然后我将变量传递给SMO 对象.我得到以下异常:

使用"1"参数调用"ExecuteWithResults"的异常:"对数据库'Russell_Test'执行结果失败."

  • $ serverName是服务器名称.
  • $ databaseName是数据库名称.
  • $ createScript是读取的脚本.

我该如何解决这个问题?

以下是代码的相关部分.

# Load Smo and referenced assemblies.
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.ConnectionInfo');
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Management.Sdk.Sfc');
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO');
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMOExtended');

    Try{
        $server = New-Object Microsoft.SqlServer.Management.Smo.Server $serverName;
        $db = $server.Databases.Item($databaseName);
        $result = $db.ExecuteWithResults($createScript);
        $result | Out-File -Append -FilePath $outputFile;
    }
    Catch
    {
        [system.exception]
        $_.Exception | Out-File -Append -FilePath $outputFile
    }
Run Code Online (Sandbox Code Playgroud)

Eri*_*ris 5

这是怎么做的:

# If we cast $Content as a [String], all the newlines are lost
# If we don't cast it, it becomes an array and batching breaks
$Content = (Get-Content $SqlScript) -join [Environment]::NewLine

# When using GO, we must set it up as a StringCollection, not a List or Array
$Batch = New-Object -TypeName:Collections.Specialized.StringCollection
$Batch.AddRange($Content)
$result = $Database.ExecuteWithResults($Batch)
Run Code Online (Sandbox Code Playgroud)