PowerShell

时间:2016-04-25 14:41:38

标签: powershell sqlcmd powershell-v5.0

我已阅读文档(sqlcmd Utility),但我无法让sqlcmd的{​​{1}}参数按预期工作。

假设这个SQL脚本(echo.sql):

-v

在未设置:setvar THE_PATH C:\Users\Craig\Desktop PRINT 'THE_PATH: $(THE_PATH)' :setvar THE_TOP 10 PRINT 'THE_TOP: $(THE_TOP)' 参数的PowerShell提示符下运行时:

-v

忽略设置数字变量(PS> sqlcmd -E -S 'server' -d 'database' -i '.\echo.sql' THE_PATH: C:\Users\Craig\Desktop THE_TOP: 10 ):

THE_TOP

如果我在PS> sqlcmd -E -S 'server' -d 'database' -i '.\echo.sql' -v THE_TOP=5 PS> sqlcmd -E -S 'server' -d 'database' -i '.\echo.sql' THE_PATH: C:\Users\Craig\Desktop THE_TOP: 10 中删除THE_TOP的默认值,则会强化忽略该参数的断言:

echo.sql

如果我尝试设置:setvar THE_TOP PRINT 'THE_TOP: $(THE_TOP)' PS> sqlcmd -E -S 'server' -d 'database' -i '.\echo.sql' -v THE_TOP=5 THE_PATH: C:\Users\Craig\Desktop THE_TOP: $(THE_TOP) 参数,我会得到:

THE_PATH

正确的PS> sqlcmd -E -S 'server' -d 'database' -i '.\echo.sql' -v THE_PATH="C:\path" Sqlcmd: ':\path': Invalid argument. Enter '-?' for help. 语法是什么?

1 个答案:

答案 0 :(得分:0)

好的,这是迟钝的。

如果脚本中使用:setvar

:setvar THE_TOP
PRINT 'THE_TOP: $(THE_TOP)'

然后您尝试在PowerShell提示符下设置它,您将收到错误:

PS> sqlcmd -E -S server -d database -i .\echo.sql -v THE_TOP=5
'THE_TOP' scripting variable not defined.

但是,如果你不在脚本中设置它:

-- variable disabled
-- :setvar THE_PATH
PRINT 'THE_TOP: $(THE_TOP)'

然后你尝试在PowerShell提示符下设置它,然后它将作为(不是真的)预期的工作:

PS> sqlcmd -E -S server -d database -i .\echo.sql -v THE_TOP=5
THE_TOP: 5

**编辑**

将动态生成的路径作为参数提供给脚本文件(extract.sql):

:out $(THE_PATH)\extract.csv
SELECT  *
FROM    the_table
WHERE   the_key = $(THE_ID)
...

在PowerShell会话中执行:

PS> $cd = Get-Location
PS> sqlcmd -E -S 'server' -d 'database' -i '.\extract.sql' -v THE_ID=5 THE_PATH=`"$cd\build`"