我在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行代码。
答案 0 :(得分:0)
您可以创建远程会话并通过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。
希望有所帮助
答案 1 :(得分:0)
我再次浏览了myscript,发现错误是由' ' master'中的字符,我省略了它,它现在正在工作。