2016-11-15 87 views
0

我在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行代碼。

+0

還應該將test.sql文件複製到server2嗎? – nciacrklo

+0

'「$ InstanceNm」' –

回答

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

希望幫助

0

我通過的MyScript跑一次發現該錯誤是由「字中的‘主造成的’,我省略此,現在正在工作。

相關問題