如果 BCP 命令无法将数据转储到文件中,则引发错误

MyS*_*DBA 7 sql-server stored-procedures bcp error-handling

使用 BCP 命令,我正在生成 SQL Server DB 表的文件。当 BCP 命令无法将数据转储到文件中时,它会为每个表创建一个空文件。这可能是由写入的查询错误或传递给 BCP 命令的空变量引起的。

有什么方法可以将这些事件捕获为错误并使其返回一些错误代码?

我正在从存储过程执行此操作。有什么办法可以在 SP 中处理这个问题吗?

Jam*_*son 8

Powershell 是您的朋友。在 Powershell 中使用 cmd 命令时,您可以使用该$LASTEXITCODE变量来读取您执行的命令的结果。

下面的代码将BCP命令传递到 Invoke-Expression cmdlet 并捕获它的输出。

$OutputPath = "C:\temp\Numbers-20151230.dat"

try
{
    $Command = "bcp dbo.Numbers out $OutputPath -T -n -S Localhost\JamesA_Test -d UtilityDB"
    $Output = Invoke-Expression -command $Command

    if ($LASTEXITCODE)
    { 
        throw $Output
    }
}
catch
{
    Write-Host "BCP command failed: $Output"   
}
Run Code Online (Sandbox Code Playgroud)

我不确定你想如何处理错误,所以我只是用来Write-Host显示这个例子的错误。您可以将错误记录到事件日志、文件、SQL 表等中。