1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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モードに切り替えることで使えるようになります。

image.png

image.png

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?