これはなに?

docker pullしてrunしたはいいけれど、SQL Server Management Studio (通称SSMS)がないゆえに、CLIからSQL Serverを使うことになった男のメモです。

接続

sqlcmd -H ホスト名 -U ログインID -P パスワード

データベースを指定する場合は-d データベース名をつける

例)

sqlcmd -H localhost -U sa -P password2020! -d mydb

SQLファイルを読み込み

sqlcmd -H ホスト名 -U ログインID -P パスワード -i ファイル名

ファイルがいくつもある場合は、こんな感じでどうでしょうか。bash/zsh使いのひと用です。

for a in *.sql; do
  sqlcmd -H ホスト名 -U ログインID -P パスワード -i "$a"
done

xargsのほうがいいかもしれません。

ls -1 *.sql | xargs -I% sqlcmd -H ホスト名 -U ログインID -P パスワード -i %

ファイル名にバージョン番号がついている(例えば、migration-1.0.0.sqlとか)場合は、sort --version-sortで並べ直すと幸せになれます。

(おまけ) Dockerから始めるSQL Server

Macのひとは、Docker Desktopをインストールします。

Docker hubを参照して、好みのバージョンのSQL Serverをpullします。

下記は2017を落とす場合です。

docker pull mcr.microsoft.com/mssql/server:2017-latest

コンテナを起動します。
mssqlという名前をつけました。
カレントディレクトリを/mntにマウントして、コンテナ内から見えるようにしました。

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=password2020!' -p 1433:1433 --name mssql -v "$PWD:/mnt" -d mcr.microsoft.com/mssql/server:2017-latest

sqlcmdコマンドはこのように実行します。
作業ディレクトリを/mntにしています。

docker exec -it -w /mnt mssql /opt/mssql-tools/bin/sqlcmd

(なんでPATH通ってないんや。。。)

(おまけその2) SQLから始めるSQL Serverデータベース

データベースを作ったり、ユーザーを作ったりするSQLは別記事に書きました。

[Microsoft] SQLから始めるSQL Serverデータベース