【SQLServer】sqlcmdで使えるスクリプト変数について(setvar コマンド)


overview

batでsqlを実行する場合はsqlcmdを使うことが多いかと思います。
サーバ名やユーザ情報の指定の仕方は知っていましたが、
setvar コマンドなるものを今回初めて知ったので備忘録として残します。

↓よく使用する変数

変数 パラメータ
SQLCMDUSER -U
SQLCMDPASSWORD -P
SQLCMDSERVER -S
SQLCMDDBNAME -d

sqlcmd - スクリプト変数の使用

setvar コマンドについて

$()の表記でSQL構文の中に埋め込むことができます。

SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
SELECT x.$(ColumnName)
FROM $(TableName)
WHERE x.BusinessEntityID < 5;

t-sqlでは変数としてはdecraleがありますが、
あくまで値やテーブルの格納となるため、
スクリプト変数のようにカラム名やテーブル名として使うことはできません。

値の渡し方

引数(-v)として渡すことができます。

sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql

また、ファイル内での宣言もできます。

:setvar DataBaseName "db1"
:setvar ColumnName "col1"
:setvar TableName "table1"

use $(DataBaseName)

SELECT x.$(ColumnName)
FROM $(TableName)
WHERE x.BusinessEntityID < 5;

 
外からパラメータを渡せるというメリットと、
今までこういうことをやろうと思うと、
文字列結合して exec等で実行という感じでしたが、
別の手法があるというのを知れました。

ssmsでsetvalコマンドを使う方法

setvalコマンドはsqlcmdで使えるスクリプト変数のため、
t-sqlを書くssmsでは一見使えなさそうに思えます。

が、sqlcmdモードに切り替えることで使えるようになります。