sqlcmd を Linux にインストール
〜 Linux から Microsoft SQL Server を操作 〜
2024-06-09 作成 福島
TOP > tips > mssqlcmd
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob | Shell ]

0. インストール要件

OSAlmaLinux release 9.4 (Seafoam Ocelot)
プログラムsqlcmd Version 17.10.0001.1


1. リポジトリの追加

Microsoft の公式ページに従ってリポジトリを追加する。

$ su
# curl -o /etc/yum.repos.d/mssql-release.repo https://packages.microsoft.com/config/rhel/9/prod.repo


2. mssql-tools パッケージのインストール
なぜか /opt にインストールされる。

# dnf install mssql-tools
# tree /opt
/opt
├- microsoft
│ └- msodbcsql17
│    ├- etc
│    │ └- odbcinst.ini
│    ├- include
│    │ └- msodbcsql.h
│    ├- lib64
│    │ └- libmsodbcsql-17.10.so.6.1
│    └- share
│       └- resources
│          └- en_US
│             └- msodbcsqlr17.rll
└- mssql-tools
   ├- bin
   │ ├- bcp
   │ └- sqlcmd         ← これを使う   
   └- share
      └- resources
         └- en_US
            ├- BatchParserGrammar.dfa
            ├- BatchParserGrammar.llr
            ├- SQLCMD.rll
            └- bcp.rll

13 directories, 10 files
bcp はデータをエクスポート / インポートするためのコマンド。
# exit
$


3. 使い方

3-1. 標準的なディレクトリでないため、PATH を通すか Alias を作っておく。
$ alias sqlcmd='/opt/mssql-tools/bin/sqlcmd'   # ~/.bashrc に記述すると吉。
3-2. sqlcmd コマンドの使い方
$ sqlcmd -S ホスト名,ポート番号 -U ユーザ名 -P "パスワード" -d インスタンス名 -Q "SQLコマンド"
実行例1:
$ sqlcmd -S sqlserver.example.jp,1433 -U UserName -P "password" -Q "SELECT @@version"
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
        Sep 24 2019 13:48:23
        Copyright (C) 2019 Microsoft Corporation
        Developer Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)

(1 rows affected)

実行例2:
$ sqlcmd -S sqlserver.example.jp,1433 -U UserName -P "password" -d TestSchema -Q "SELECT * FROM dbo.tableFruit"
Seq         Name                 Price      Tax 
----------- -------------------- ---------- -----------  
          1 Apple                       300          10
          2 Orange                      500          10

(2 rows affected)
これもただの例。テーブルの作り方はここでは論じない。
$ sqlcmd -?
上記実行例で使用したのは紫色に着色したオプション。
Microsoft (R) SQL Server Command Line Tool
Version 17.10.0001.1 Linux
Copyright (C) 2017 Microsoft Corporation. All rights reserved.

usage: sqlcmd            [-U login id]          [-P password]
  [-S server or Dsn if -D is provided]
  [-H hostname]          [-E trusted connection]
  [-N Encrypt Connection][-C Trust Server Certificate]
  [-d use database name] [-l login timeout]     [-t query timeout]
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]  
  [-c cmdend]
  [-q "cmdline query"]   [-Q "cmdline query" and exit]
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-K application intent]
  [-M multisubnet failover]
  [-b On error batch abort]
  [-D Dsn flag, indicate -S is Dsn]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-g enable column encryption]
  [-G use Azure Active Directory for authentication]
  [-? show syntax summary]