尝试使用PowerShell

时间:2016-02-22 17:12:17

标签: sql-server powershell automation

当我手动应用SQL文件时,就像重新编制索引的作业一样,一切都运行得很好。我想在PowerShell中自动应用SQL文件,但是在使用Get-Content时我遇到了各种不正确的语法错误。有没有更好的方法来获取SQL文件内容,然后将这些内容应用于不会将代码重新格式化到我得到错误语法错误的远程服务器上。

我得到的一般错误(任何语法都可能抛出错误 - ps在获取文件内容时似乎错误地应用了语法):

  

[anything]

附近的语法不正确

注意:所有GO都已删除,因此与此相关;它可能会因为开始,转到等而引发错误。原因是它没有保留SQL文件的构建方式。

更新

SQL文件可以是从添加权限到创建索引到构建表到创建存储过程。我有大约100个SQL文件。如果我手动执行它们,它们都可以工作,所以这与错误的SQL语法无关,但与Powershell如何读取SQL语法并将其作为命令运行有关。

答案

以下似乎有效:

Get-Content $file -Raw

2 个答案:

答案 0 :(得分:1)

  

但是在使用Get-Content

时,我遇到了各种不正确的语法错误

Get-Content将返回字符串的数组。您需要使用的是单个字符串。如果您至少拥有PowerShell 3.0,那么-Raw开关就是您想要的。

Get-Content $file -Raw

早期版本可以使用

Get-Content $file | Out-String

对于异常大的文件,您可以使用.Net StreamReader,但我认为这不是必需的。

答案 1 :(得分:1)

你是如何“应用SQL文件”的?如果您将文件的内容传递到Invoke-SQLCmd,则需要像@Matt所说的那样使用-Raw

但是,你甚至不需要这样做。 Invoke-SQLCmd允许您直接将文件名传递给它。使用-Inputfile参数。