将一台服务器的sql脚本远程执行到另一台
问题描述:
我在Server1中有一个“test.sql”,并且我想在server2和server3上运行这个脚本。我使用下面的代码:将一台服务器的sql脚本远程执行到另一台
$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的所有代码和我的目标服务器2,但我得到这个错误:当我键入-?
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行代码。
答
您可以创建远程会话并通过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。
希望帮助
答
我通过的MyScript跑一次发现该错误是由“字中的‘主造成的’,我省略此,现在正在工作。
还应该将test.sql文件复制到server2吗? – nciacrklo
'“$ InstanceNm”' –