我已阅读文档(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.
语法是什么?
答案 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`"