通过执行位于文件夹中的查询列表来更新数据库.
我需要能够检测到任何错误,这些错误也会导致sql Server Management Studio中的“Query completed with errors”.
以下工作检测“无效对象”错误:
PS sqlSERVER:\> $ErrorActionPreference Stop PS sqlSERVER:\> $Error.Clear() PS sqlSERVER:\> $Error PS sqlSERVER:\> Invoke-sqlcmd -ServerInstance .\sqlEXPRESS -Database Test -Query "select * from doesnotexist" -ErrorAction SilentlyContinue PS sqlSERVER:\> $Error.Exception Invalid object name 'doesnotexist'. PS sqlSERVER:\>
对select 1/0执行相同操作不起作用:
PS sqlSERVER:\> $ErrorActionPreference Stop PS sqlSERVER:\> $Error.Clear() PS sqlSERVER:\> $Error PS sqlSERVER:\> Invoke-sqlcmd -ServerInstance .\sqlEXPRESS -Database Test -Query "select 1/0" -ErrorAction SilentlyContinue PS sqlSERVER:\> $Error.Exception PS sqlSERVER:\>
没有检测到这个特定的错误让我想知道其他错误是否也会被检测不到.
知道为什么会发生这种情况以及如何确保检测到所有错误?
UPDATE
事实证明我在我安装的服务器上没有可用的Invoke-sqlcmd,所以第二个想到我必须使用sqlcmd.exe.
我认为这对我有用:
$tempfile = [io.path]::GetTempFileName() $cmd = [string]::Format("sqlcmd -S {0} -U {1} -P {2} -d {3} -i {4} -b > $tempfile",$g_connectionstring."Data Source",$g_connectionstring."User ID",$g_connectionstring."Password",$g_connectionstring."Initial Catalog",$path) Invoke-Expression -Command $cmd if ($LASTEXITCODE) { $err = Get-Content $tempfile | Out-String Corax-Message "sql" "Error" $err exit } Remove-Item $tempfile