我很困惑:
以下代码会产生错误:
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"
$_
}
结果:
ERROR Invoke-Sqlcmd:无法在带有的列上创建默认值 IDENTITY属性。表'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
在这两种情况下都必须使用catch-block!
答案 0 :(得分:3)
这是invoke-sqlcmd的已知错误。我在Connect上记录了该项目,该项目被标记为已修复,但在连接术语中“固定”并不一定意味着该修补程序已经发布或计划在当前版本中发布。它只是意味着它已在内部修复,并且有一天它们会释放它。
截至2013年4月19日,修复程序尚未发布。
答案 1 :(得分:-2)
我怀疑这与Invoke-SqlCmd启动的连接配置有关;特别是,在SQL Server中将ANSI_WARNINGS设置为OFF允许将TSQL块评估为NULL。
SET ANSI_WARNINGS OFF
SELECT CAST(111111111111 AS TinyINT) AS Error
返回NULL。