如何本地记录来自 PowerShell Invoke-Sqlcmd 的输出?
我正在使用 Invoke-Sqlcmd 循环遍历一个大的(50,000-90,000 个 SQL 文件,每个文件中有 1-10 个插入)小 SQL 插入语句集。大多数插入语句运行正确,但一些字符串太长,我收到“字符串或二进制数据将被截断”错误。
现在我正在使用 Start-Transcript 来捕获输出并识别有问题的插入语句,但 Start-Transcript 捕获了所有内容。我只想捕获错误 - 或者 - 只捕获 Invoke_Sqlcmd 语句输出。
如果这行得通(我认为应该如此),我就准备好了:
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true | Out-File -FilePath "C:\Temp\Errorlog.txt" -Append
Run Code Online (Sandbox Code Playgroud)
或者,如果这有效:
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true | Tee-Object -FilePath "C:\Temp\Errorlog.txt" -Append
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用。
我也尝试过这种怪物,但我根本没有从中得到任何错误:
$sqls = (Get-ChildItem -Path "I:\2019_06_24\_SQL"-Filter *.sql | Sort-Object -Property CreationTime).FullName
foreach ($sql in $sqls)
{
$Error.Clear()
try
{
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true
}
catch
{
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' | Out-File "C:\Temp\Errorlog.txt" -Append
$sql | out-file -filepath "C:\Temp\Errorlog.txt" -Append
$Error | out-file -filepath "C:\Temp\Errorlog.txt" -Append
}
}
Run Code Online (Sandbox Code Playgroud)
如何直接从 Invoke-Sqlcmd 语句登录?
该代码基于上面的“怪物”示例。
在每个循环开始时,它会清除 $error 变量。然后,如果 Invoke-Sqlcmd 生成错误,IF 语句将拾取该错误。然后它会将 FullName ($sql) 添加到日志文件中,然后在下一行添加错误。
$sqls = (Get-ChildItem -Path "I:\2019_06_24\_SQL" -Filter *.sql |
Sort-Object -Property CreationTime).FullName
foreach ($sql in $sqls)
{
$error.clear()
Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true
if ($error -ne $null)
{
$sql + '
' + $error | Out-File -FilePath "C:\Temp\ErrorLog.txt" -Append
}
}
Run Code Online (Sandbox Code Playgroud)
事实上,ErrorLog.txt 将类似于以下内容:
I:\2019_06_24\_SQL\Test_File_5.sql
String or binary data would be truncated.
The statement has been terminated.
Msg 8152, Level 16, State 30, Procedure , Line 3.
I:\2019_06_24\_SQL\Test_File_303.sql
String or binary data would be truncated.
The statement has been terminated.
Msg 8152, Level 16, State 30, Procedure , Line 3.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |