【问题标题】:Remote execute sql script for one server to another一台服务器远程执行sql脚本到另一台服务器
【发布时间】:2017-03-29 00:35:10
【问题描述】:

我在 Server1 中有一个“test.sql”,我想在 server2 和 server3 上运行这个脚本。我使用了以下代码:

$InstanceNm = "server2\inst2,1433"

$CommandExecute_SP = "D:\testscript\test.sql" --located in Server1

invoke-expression "SQLCMD -E -S $InstanceNm -d 'master' -i  $CommandExecute_SP -b"

我从 server1 运行所有代码并以 server2 为目标,但出现此错误:

SQLCMD : Sqlcmd: 'server2\inst2,1433': Unexpected argument. Enter '-?' for help.

然后当我输入-? 它给出了这个:

At line:1 char:2
+ -?
+  ~
Missing expression after unary operator '-'.
At line:1 char:2
+ -?
+  ~
Unexpected token '?' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingExpressionAfterOperator

我想知道运行 .sql 文件的正确方法是什么,该文件从单独的服务器在另一台服务器上创建对象?我知道如何通过使用System.Data.SQLClient.SQLConnection 来运行简短的 sql 语句,但我想避免这种情况,因为这个 .sql 文件有超过 1000 行代码。

【问题讨论】:

  • test.sql文件也应该复制到server2吗?
  • "$InstanceNm"

标签: sql-server powershell invoke sqlcmd


【解决方案1】:

您可以创建远程会话并通过Invoke-Command-cmdlet 运行命令。

$sessions = New-PSSession -computername server1, server2, server3 
invoke-command -session $sessions -scriptblock {
   invoke-expression "SQLCMD -E -S $InstanceNm -d 'master' -i  $CommandExecute_SP -b"
}

如果你有 Win2012 R2 (或更高版本) PS-remoting 默认激活。否则看看remoting。

希望有帮助

【讨论】:

    【解决方案2】:

    我再次运行myscript,发现错误是由'master'中的'字符引起的,我省略了它现在可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2019-08-15
      • 2016-05-03
      • 2020-11-26
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      相关资源
      最近更新 更多