如何从PowerShell绑定sqlcmd的-v参数

时间:2012-08-25 07:31:18

标签: powershell sqlcmd

以下代码,直接设置-v参数正在运行

$sqlcmd = @(Resolve-Path "$env:ProgramFiles\Microsoft SQL Server\*\Tools\binn\SQLCMD.EXE")[0]

$path1 = 'D:\somescript.sql'

& $sqlcmd -b -S NB-BK\SQLEXPRESS -d BK_Prod -U sa -P mypassword -l 180 -i $path1 -v Mandant=1 SAPMandant="009" SAPEinrichtung="0001" 

但我需要一种从PowerShell变量设置这些值的方法。

我试过了:

$sqlcmd = @(Resolve-Path "$env:ProgramFiles\Microsoft SQL Server\*\Tools\binn\SQLCMD.EXE")[0]

$path1 = 'D:\somescript.sql'

$sqlcmdparameters = 'Mandant=1 SAPMandant="009" SAPEinrichtung="0001" '
& $sqlcmd -b -S NB-BK\SQLEXPRESS -d BK_Prod -U sa -P mypassword -l 180 -i $path1 -v $sqlcmdparameters

我发现了这个on SO,但它对我没有帮助。

2 个答案:

答案 0 :(得分:2)

我发现以下解决方案适用于PowerShell V2

$sqlcmd = @(Resolve-Path "$env:ProgramFiles\Microsoft SQL Server\*\Tools\binn\SQLCMD.EXE")[0]
$path1 = 'D:\somescript.sql'
$cmdparameters = @(
    'Mandant=1',
    'SAPMandant="009"'
)

& $sqlcmd -b -S NB-BK\SQLEXPRESS -d BK_Prod -U sa -P mypassword -l 180 -i $path1 -v $cmdparameters

答案 1 :(得分:1)

尝试使用start-process。这就是我为Powershell命令行解析问题所做的事情。首先尝试调用operator(&),如果这不起作用,请将其包装在启动过程调用中。

$tempFile = [io.path]::GetTempFileName()

$exitCode = (start-process -FilePath $sqlcmd -ArgumentList @"
-b -S NB-BK\SQLEXPRESS -d BK_Prod -U sa -P mypassword -l 180 -i $path1 -v $sqlcmdparameters
"@ -Wait -RedirectStandardOutput $tempFile -NoNewWindow -Passthru).ExitCode

当使用启动过程时,通常需要捕获exitcode并将输出重定向到临时文件以获取结果。然后我会有一些代码来检查try / catch / finally块中的$ exitcode和cleanup临时文件