Я запутался:Invoke-Sqlcmd иногда сообщает об ошибках TSQL, а иногда нет?
Следующий код выдает ошибку:
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 : Defaults cannot be created on columns with an IDENTITY attribute. Table 'foo', column '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
В обоих случаях улов-блок должен быть использован!
Спасибо, Чад! У вас есть обходной путь для этой проблемы? Как вы справляетесь с этим? – eghetto
Мое обходное решение не использует invoke-sqlcmd или, по крайней мере, использовать его только тогда, когда мне не нужна обработка ошибок. Я либо использую свою собственную замену, либо sqlcmd.exe. Несколько подробнее здесь http://sev17.com/2012/11/12/sqlcmd-is-dead-long-live-sqlcmd/ –
Эта проблема исправлена в SQL 2014 CTP2. вы можете загрузить SQL 2014 CTP2 с http://www.microsoft.com/en-us/sqlserver/sql-server-2014.aspx – eghetto