3

我编写了一个 powershell 脚本来调用 sqlcmd.exe 来针对远程 sql 服务器执行 sql 脚本。powershell 脚本检查 $LASTEXITCODE。如果 $LASTEXITCODE 不为零,我会抛出“脚本失败。返回代码是 $LASTEXITCODE。”

该脚本多次用于执行不同的 sql 脚本,并且是在部署期间运行的 powershell 脚本链的一部分。

该脚本大部分时间运行良好,但随机失败,返回码为-1073741502

这只是在升级到 SQL2008 后才开始发生,我无法通过手动运行单个 powershell 脚本或手动运行 sql cmd 脚本来重现它。

这是powershell命令:

& 'sqlcmd.exe' -S $databaseServer -r -b -E -i '$scriptFullPath'

if($LASTEXITCODE -ne 0) { throw "脚本失败。返回码是 $LASTEXITCODE。" }

失败看似随机的性质造成了很多痛苦。我无法确定错误是 SQL2008、SQLCMD(尽管我使用 osql.exe 得到相同的行为)还是以某种方式与 powershell 耦合。

sqlcmd 正在执行的实际 sql 似乎与问题无关,因为 sql 脚本会执行一段时间然后失败。

在许多不同的工作站和服务器(Win7、Win2003 和 Win2008)上都出现了相同的故障

任何有关如何追踪此问题的指导将不胜感激。

4

2 回答 2

1

sqlcmd如果您使用的是 Powershell,请不要使用命令行!

V2 中有非常好的内置工具,可以让您与 SQL Server 进行更强大的交互,并且不需要您解析返回代码的文本来检查错误——它们实际上会返回正确的错误代码。

这是一篇关于技术网的文章Invoke-SQLCmd

请记住,您需要先加载管理单元:

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100
于 2012-01-04T14:06:55.887 回答
0

The root-cause is actually explained elsewhere on here

Exit Code -1073741502 is 0xC0000142 in hex (status_dll_init_failed). Microsoft's KB2701373 addresses the leaky handles made by Console.Write in Microsoft.powershell.consolehost.dll.

Side-Note: Some "Fixes" on the Internet involve doing something differently, then restarting PowerShell. Yet the actual restart of PowerShell is what addresses the problem (temporarily)

于 2014-10-29T17:02:02.993 回答