调用Sqlcmd有时报告TSQL错误,有时不报告?

调用Sqlcmd有时报告TSQL错误,有时不报告?,tsql,powershell,error-handling,cmdlets,catch-block,Tsql,Powershell,Error Handling,Cmdlets,Catch Block,我很困惑: 以下代码产生错误: try { invoke-sqlcmd -ServerInstance 'localhost' -Database 'tempdb' -Query 'CREATE TABLE foo (bar TINYINT IDENTITY(1,1) DEFAULT 1);;' -Verbose -ErrorLevel 0 -AbortOnError -ErrorAction Stop -OutputSqlErrors $true -ErrorVariable $err

我很困惑:

以下代码产生错误:

try {
    invoke-sqlcmd -ServerInstance 'localhost' -Database 'tempdb' -Query 'CREATE TABLE foo (bar TINYINT IDENTITY(1,1) DEFAULT 1);;' -Verbose -ErrorLevel 0 -AbortOnError -ErrorAction Stop -OutputSqlErrors $true -ErrorVariable $err -OutVariable $err -SeverityLevel 0;
    "OK";
}
catch {
    "ERROR"
    $_
}
结果:

错误 Invoke Sqlcmd:无法在具有 标识属性。表'foo',列'bar'


这件作品显然流畅:

try {
    invoke-sqlcmd -ServerInstance 'localhost' -Database 'tempdb' -Query 'SELECT CAST(111111111111 AS TinyINT) AS Error' -Verbose -ErrorLevel 0 -AbortOnError -ErrorAction Stop -OutputSqlErrors $true -ErrorVariable $err -OutVariable $err -SeverityLevel 0;
    "OK"
}
catch {
    "ERROR"
    $_
}
结果:

OK


在这两种情况下都必须使用挡块

我怀疑这与调用SqlCmd启动的连接的配置有关;特别是,在SQL Server中设置为OFF可以将TSQL块计算为空

SET ANSI_WARNINGS OFF
SELECT CAST(111111111111 AS TinyINT) AS Error

返回NULL。

我怀疑这与Invoke SqlCmd启动的连接的配置有关;特别是,在SQL Server中设置为OFF可以将TSQL块计算为空

SET ANSI_WARNINGS OFF
SELECT CAST(111111111111 AS TinyINT) AS Error

返回NULL。

这是调用sqlcmd的已知错误。我登录后,该项被标记为已修复,但连接术语中的“修复”并不一定意味着该修复已发布或计划在当前版本中发布。这只是意味着它已经在内部修复,他们有一天会发布它


截至2013年4月19日,该修复程序尚未发布。

这是invoke sqlcmd的已知错误。我登录后,该项被标记为已修复,但连接术语中的“修复”并不一定意味着该修复已发布或计划在当前版本中发布。这只是意味着它已经在内部修复,他们有一天会发布它


截至2013年4月19日,该修复程序尚未发布。

谢谢Efran,但我认为情况并非如此:打开ANSI_警告;选择CAST(111111111作为TinyINT)作为错误也没有帮助。谢谢Efran,但我不认为这里是这样的:打开ANSI_警告;选择CAST(111111111作为TinyINT)作为错误也没有帮助。谢谢Chad!你有解决这个问题的办法吗?如何处理它?我的解决方法不是使用invoke-sqlcmd,或者至少在我不关心错误处理时才使用它。我将使用自己的替换项或sqlcmd.exe。SQL 2014 CTP2中修复了此问题的更多细节。您可以从下载SQL 2014 CTP2!你有解决这个问题的办法吗?如何处理它?我的解决方法不是使用invoke-sqlcmd,或者至少在我不关心错误处理时才使用它。我将使用自己的替换项或sqlcmd.exe。SQL 2014 CTP2中修复了此问题的更多细节。您可以从下载SQL 2014 CTP2