加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

从powershell运行SQL脚本文件

发布时间:2020-12-12 08:54:15 所属栏目:MsSql教程 来源:网络整理
导读:我试图从Power Shell运行存储在文本文件中的查询.我使用以下来做到这一点; Invoke-Expression 'sqlcmd -d TestDB -U $user -P $pw -i "E:SQLQuery1.sql"' 如果从.sql文件执行查询时发生错误或异常,我如何在我的Powershell脚本中捕获它?如何获取脚本输出?
我试图从Power Shell运行存储在文本文件中的查询.我使用以下来做到这一点;
Invoke-Expression 'sqlcmd -d TestDB -U $user -P $pw -i "E:SQLQuery1.sql"'

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

注意:我不能使用invoke-sqlcmd

解决方法

回答这个问题

If some error or exception occurred when executing .sql file how can I get that into my PowerShell script? How can I get the script output?”

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

来自帮助:

The Invoke-Expression cmdlet evaluates or runs a specified string as a command and returns the results of the expression or command

更好的方法是使用已有的PowerShell方法 – 如果安装了任何SQL Server 2008(或更新版本)组件/工具(如SSMS),则会安装Invoke-SQLCmd.如果你有SQL Server 2012,那很简单:import-module sqlps.对于2008,您需要添加Snap-In,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;

使用this和Invoke-SQLCmd,您将能够使用try / catch来获取和处理发生的任何错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读