调用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