我正在尝试从 PowerShell 运行存储在文本文件中的查询。我使用以下方法来做到这一点;
Invoke-Expression 'sqlcmd -d TestDB -U $user -P $pw -i "E:\SQLQuery1.sql"'
如果在执行查询时发生错误或异常.sql
文件,如何在我的 Powershell 脚本中捕获该文件?如何获取脚本输出?
注意:我无法使用invoke-sqlcmd
回答问题
如果执行 .sql 文件时发生一些错误或异常,如何将其放入我的 PowerShell 脚本中?我如何获得脚本输出?”
Invoke-Expression
返回执行表达式的输出。然而,它可能只捕获STDOUT
, not STDERR
(我没有测试过,因为我不使用这种方法),所以你可能不会得到实际的错误消息。
来自帮助:
Invoke-Expression cmdlet 将指定的字符串作为命令求值或运行,并返回表达式或命令的结果
更好的途径是使用您已有的 PowerShell 方法 -Invoke-SQLCmd
如果您安装了任何 SQL Server 2008(或更高版本)组件/工具(如 SSMS),则会安装。如果您有 SQL Server 2012,则非常简单:import-module sqlps
。对于 2008 年,您需要添加一个管理单元,add-pssnapin SqlServerCmdletSnapin
。既然你已经sqlcmd.exe
,PowerShell 组件应该已经存在。
如果一切都失败了,请转到System.Data.SQLClient
route:
$Conn=New-Object System.Data.SQLClient.SQLConnection "Server=YOURSERVER;Database=TestDB;User Id=$user;password=$pw";
$Conn.Open();
$DataCmd = New-Object System.Data.SqlClient.SqlCommand;
$MyQuery = get-content "e:\SQLQuery1.sql";
$DataCmd.CommandText = $MyQuery;
$DataCmd.Connection = $Conn;
$DAadapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$DAadapter.SelectCommand = $DataCmd;
$DTable = New-Object System.Data.DataTable;
$DAadapter.Fill($DTable)|Out-Null;
$Conn.Close();
$Conn.Dispose();
$DTable;
有了这个和Invoke-SQLCmd
,你将能够使用try/catch
发现并处理发生的任何错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)