【问题标题】:Run SQL script file from powershell从 powershell 运行 SQL 脚本文件
【发布时间】:2013-08-08 03:17:35
【问题描述】:

我正在尝试从 PowerShell 运行存储在文本文件中的查询。我使用以下方法来做到这一点;

Invoke-Expression 'sqlcmd -d TestDB -U $user -P $pw -i "E:\SQLQuery1.sql"'

如果从.sql 文件执行查询时发生错误或异常,我如何在我的 Powershell 脚本中捕获它?如何获得脚本输出?

注意:我不能使用invoke-sqlcmd

【问题讨论】:

  • 你为什么使用Invoke-Expression?只需像往常一样调用 sqlcmd 即可。 PS> sqlcmd.exe -d TestDB -U $user -P $pw -I E:\SQLQuery.sql1。如果您看到“错误或异常”,请发布此错误或异常的全文。
  • 您可能还解释了为什么不能使用invoke-sqlcmd。也许有一个解决方法。
  • +1 需要对 invoke-sqlcmd 的解释。 IIRC,如果你有一个安装了sqlcmd 的系统,你也会有invoke-sqlcmd(只要它是来自 SQL Server 2008+ 的工具)

标签: powershell


【解决方案1】:

回答问题

如果在执行 .sql 文件时发生错误或异常,我如何将其输入到我的 PowerShell 脚本中?如何获取脚本输出?”

Invoke-Expression 返回执行的表达式的输出。但是,它可能只捕获STDOUT,而不是STDERR(我没有测试过,因为我不使用这种方法),因此您可能不会收到实际的错误消息。

来自帮助:

Invoke-Expression cmdlet 计算或运行指定字符串作为命令并返回表达式或命令的结果

更好的方法是使用您已有的 PowerShell 方法 - 如果您已安装任何 SQL Server 2008(或更新版本)组件/工具(如 SSMS),则安装 Invoke-SQLCmd。如果你有 SQL Server 2012,这很容易:import-module sqlps。对于 2008,您需要添加一个管理单元 add-pssnapin SqlServerCmdletSnapin。既然你有sqlcmd.exe,PowerShell 组件应该已经在那里了。

如果一切都失败了,请走System.Data.SQLClient 路线:

$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 来获取和处理发生的任何错误。

【讨论】:

【解决方案2】:

正如this question's answers 中所见,Powershell 内置了一个调用 SQLCMD 的方法,不出所料,Invoke-Sqlcmd

单个文件非常容易使用:

Invoke-sqlcmd -ServerInstance $server -Database $db -InputFile $filename

或组:

$listOfFiles | % { Invoke-sqlcmd -ServerInstance $server -Database $db -InputFile $_ } 

【讨论】:

    【解决方案3】:

    使用invoke-sqlquery 模块,可在this website 获得。

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多