将T-SQL文件导入PowerShell脚本

时间:2016-03-23 04:04:20

标签: sql tsql powershell

我有一个包含以下sql代码的txt文件(load_check_run_bmu.sql)。

RESTORE DATABASE Address from disk='C:\dir\path\address.bmu'

Use Client
GO
Select f_name
From
cst.name

USE wage
GO
Exec sp_salary

Use Client
GO
Select f_name
From
cst.name

然后我有一个包含以下内容的批处理文件:

sqlcmd -S .\NorthWind -i"C:\scripts\load_check_run_bmu.sql"

我需要做的是能够在powershell脚本中执行所有必要的SQL命令并删除sql txt文件和sqlcmd批处理文件

我知道我需要以下代码,但我正在努力研究如何将T-SQL脚本转换为可用于$ SqlCmd.CommandText变量的内容

$sqlServer = "."
$sqlDBName = "NorthWind"
$sqlConnectionString ="Server = $sqlServer; Database = $sqlDBName;     Integrated Security = True"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $sqlConnectionString
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
**$SqlCmd.CommandText = [SQL Command(s)]<====( Need assistance populating this)**
$SqlCmd.Connection = $SqlConnection
$SqlCmd.Connection.Open()
$ReturnValue = $SqlCmd.ExecuteNonQuery()
$SqlCmd.Connection.Close()

2 个答案:

答案 0 :(得分:1)

使用双引号T-SQL.txt "文件放入字符串中,然后取出GO语句。您还可以使用;结束每个语句,以确保查询不会混淆,并且查询应该运行而不会失败:

$TSQLString = "RESTORE DATABASE Address from disk='C:\dir\path\address.bmu';

Use Client;
Select f_name
From
cst.name;

USE wage;
Exec sp_salary;

Use Client;
Select f_name
From
cst.name;"

然后使用字符串作为变量:

$SqlCmd.CommandText = $TSQLString

看起来您在上面的查询中使用了多个数据库。如果是这种情况,如果您使用以下语句连接到单个数据库,则此方法可能无效。

$sqlConnectionString ="Server = $sqlServer; Database = $sqlDBName; Integrated Security=True"

为了解决这个问题,您需要为每个语句打开一个连接。因此,您可能希望创建一个连接到server \ database并运行给定查询的函数,例如(Run-Sql将是您需要创建的函数)。

$SQLQuery1 = "RESTORE DATABASE Address from disk='C:\dir\path\address.bmu';"
$SQLQuery2 = "Select f_name From cst.name;"
$SQLQuery3=  "Exec sp_salary;"
$SQLQuery4 = "Select f_name From cst.name;"

# Run all statments
Run-SQL -query $SQLQuery1 -DB "NorthWind" -Server "." 
Run-SQL -query $SQLQuery2 -DB "Client"    -Server "." 
Run-SQL -query $SQLQuery3 -DB "wage"      -Server "." 
Run-SQL -query $SQLQuery4 -DB "Client"    -Server "." 

答案 1 :(得分:-1)

使用invoke-SQLCMD Whick是sqlps模块的一部分