2017-06-12 62 views
0

我有以下行來設置我的sql cmd。如何通過PowerShell將多個變量傳遞到SQL腳本中?

$mySqlCmd = "sqlcmd -S $server -U $username -P $pwd -d $dbname -o $lis -i $sqlScript -v fileDate = $fileDate, filePath = $filePath, sqlLoadErrors = $sqlLoadErrorPath" 
Invoke-Expression $mySqlCmd 

這似乎不適用於多個變量。如果我刪除了我想要傳遞給SQL腳本的最後2個變量,SQL腳本就會運行並工作。

在我的SQL腳本,我有以下幾點:

DECLARE 
    @currentDate NVARCHAR(25), 
    @filePath NVARCHAR(25), 
    @sqlLoadErrors NVARCHAR(25) 

SET @currentDate = $(fileDate) 
SET @filePath = $(filePath) 
SET @sqlLoadErrors = $(sqlLoadErrors) 

有什麼不對的PowerShell腳本正在做的變量傳遞到SQL腳本?

+0

我敢打賭,逗號混淆解析器。我會嘗試使用PowerShell的停止解析符號''%'。像這樣:'$ mySqlCmd =「sqlcmd - %-S $ server -U $ username -P $ pwd -d $ dbname -o $ lis -i $ sqlScript -v fileDate = $ fileDate,filePath = $ filePath,sqlLoadErrors = $ sqlLoadErrorPath「'。 –

+1

另外,'$ pwd'是當前工作目錄的保留變量名稱。它來自「print working directory」的'pwd' POSIX shell命令。我會避免使用它。 –

+0

似乎不起作用。感謝pwd提示,儘管我現在改變了。 – user3266638

回答

0

試試這個:

$cmdparameters = @(
    'fileDate = "17/06/2017"', 
    'filePath = "c:\temp\test.txt"', 
    'sqlLoadErrors = "yourcontent"' 
) 

$mySqlCmd = "sqlcmd -S $server -U $username -P $pwd -d $dbname -o $lis -i $sqlScript -v $cmdparameters" 
Invoke-Expression $mySqlCmd 
相關問題