0

ドキュメント ( sqlcmd Utilitysqlcmd ) を読みましたが、の-vパラメーターを期待どおりに動作させることができません。

次の SQL スクリプト (echo.sql) を想定します。

:setvar THE_PATH C:\Users\Craig\Desktop
PRINT 'THE_PATH: $(THE_PATH)'

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

-v引数を設定せずに PowerShell プロンプトで実行すると、次のようになります。

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_TOPinのデフォルト値を削除する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.

正しい-v構文は何ですか?

4

1 に答える 1

0

OK、これは遅れています。

: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`"
于 2016-04-28T15:52:19.127 に答える