1

我很困惑:

以下代码会产生错误:

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:无法在具有 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!

4

2 回答 2

3

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

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

于 2013-04-20T00:53:32.967 回答
-2

我怀疑这与 Invoke-SqlCmd 发起的连接的配置有关;特别是,在 SQL Server 中将ANSI_WARNINGS设置为 OFF 允许您的 TSQL 块被评估为 NULL。

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

返回 NULL。

于 2013-04-19T14:18:37.233 回答