如何使用PowerShell运行SQL脚本?

5
我想用PowerShell运行一个SQL脚本,但出现了错误:“Invoke-sqlcmd”不被识别为命令、函数、脚本文件或可执行程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。”
我从某个网站找到了以下片段,但这仅适用于一个SQL命令...我想运行一个SQL脚本。
请问有人能帮忙修改以下内容以运行SQL脚本或提供更好的建议吗?
   SQLServer = "ABCD\ABC" 
    $SQLDBName = "ABC_1223"
    $SqlQuery = "select * from table" 

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server = $SQLServer; Database  =$SQLDBName;uid=$SQLDBName;pwd= $pwd; Integrated Security = True" 

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = $SqlQuery
    $SqlCmd.Connection = $SqlConnection 
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd 
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet) 
    $SqlConnection.Close()
    clear 
    $DataSet.Tables[0]

1
要使用invoke-sqlcmd,您必须导入sqlps模块。http://blog.smu.edu/wis/2012/11/26/sql-server-powershell-module-sqlps/ - David Brabant
@David Brabant,你能帮我完成这个任务吗?你手头有什么步骤吗?另外,你看到我们可以对上述脚本进行哪些修改吗? - user2075017
1个回答

5

您可以直接使用当前的代码,只需将SQL脚本放在Here-String(字符串文字)中。此外,我建议将对SQL数据库的调用包装在Try / Catch / Finally结构中,以确保您的连接已关闭和处理。最后,请考虑在连接字符串中使用应用程序名称,以便向DBA提供有关您的连接相关性的线索。组合在一起:

Try{

  $SQLServer = "ABCD\ABC" 
  $SQLDBName = "ABC_1223"

#This is the here-string
  $SqlQuery = @"
    select * from table
    where we can select stuff
    and filter it
    and join
    etc
"@

  $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
  $SqlConnection.ConnectionString = "Server = $SQLServer; Database  =$SQLDBName;Application Name = 'user2075017_db_call';uid=$SQLDBName;pwd= $pwd; Integrated Security = True" 

  $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
  $SqlCmd.CommandText = $SqlQuery
  $SqlCmd.Connection = $SqlConnection 
  $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
  $SqlAdapter.SelectCommand = $SqlCmd 
  $DataSet = New-Object System.Data.DataSet
  $SqlAdapter.Fill($DataSet) 
  $DataSet.Tables[0]
}
Catch{
}
Finally{
  $SqlConnection.Close()
  $SqlConnection.Dispose()
}

你好 @nimizen,非常感谢你的帮助。我的要求是在没有调用的情况下使用PowerShell运行一个名为abcd.sql的SQL脚本,上面的代码几乎类似于我为SQL查询编写的代码。除了查询之外,还有其他脚本的建议吗? - user2075017

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接