Powershell脚本运行SQL脚本文件以更改数据库表而无需启动MS SQL Server Management Studio

时间:2019-06-18 15:53:42

标签: powershell

我正在尝试创建一个PowerShell脚本,该脚本将运行将更新SQL Server数据库的MS SQL脚本。 SQL脚本将保存在特定的文件夹中,并且在运行PowerShell之后,它应在不启动Management Studio的情况下运行脚本。

我有一个PowerShell命令,可以在PowerShell中启动并启动sqlcmd,但是让我失望的是,当我使用PowerShell的Invoke-item功能时,它正在启动Microsoft SQL Server管理工作室。我想要的是在脚本中传递登录凭据并运行SQL脚本,而无需启动SQL Server Management Studio。

PS C:\Users\Admin> $SqlServer = "localhost"
PS C:\Users\Admin> $SqlDBName = "Test"
PS C:\Users\Admin> $SqlConnection =New-Object System.Data.SqlClient.SqlConnection
PS C:\Users\Admin> $SqlConnection.ConnectionString ="Server = $SqlServer; Database =$SqlDBName; User id ='**'; password ='**'"
PS C:\Users\Admin> Invoke-Item 'D:\MSSQLScripts\AlterTable.sql'

AlterTable.sql就是这样

use Test
Alter table employee
add Dateofjoining date;
select * from  Employee 

因此,正在发生的事情是PowerShell正在触发AlterTable.sql脚本并启动Microsoft SQL Server Management Studio登录页面。我希望这是无缝的-没有其他人参与。登录页面完全不能出现。在SqlConnection字符串中传递凭据的原因是为了避免这种情况。它应该更改数据库,并且所有用户都应检查日志文件。

2 个答案:

答案 0 :(得分:0)

将脚本读取为字符串,并将其传递给SqlCommand object并执行:

$SqlScript = Get-Content D:\MSSQLScripts\AlterTable.sql -Raw
$SqlCommand = New-Object System.Data.SqlClient.SqlCommand
$SqlCommand.CommandText = $SqlScript
$SqlCommand.Connection = $SqlConnection
[void]$SqlCommand.ExecuteNonQuery()

答案 1 :(得分:0)

我设法通过用 Invoke-Sqlcmd 代替Get-Content来解决此问题。使用 Invoke-Sqlcmd ,我无需运行Microsoft SQL Management Studio就可以运行sql脚本。因此,在这种情况下,我使用的是 Invoke-Sqlcmd -InputFile(文件路径) ,它正在执行脚本。