Ubuntu 16.04 x64 で SQL Server2017 Express を試してみる

#目的
Linux版のために使い始めた Ubuntu に SQL Server2017 Express をインストールしてみる
##aptのrepositoryを追加する
<pre>
$ sudo wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"
</pre>
##SQL Server をインストールする
<pre>
$ sudo apt-get update
$ sudo apt-get install -y mssql-server
</pre>
##SQL Server の初期設定を行う
<pre>
$ sudo /opt/mssql/bin/mssql-conf setup
SQL Server のエディションを選択します:
　1) Evaluation (無料、製品使用権なし、期限 180 日間)
　2) Developer (無料、製品使用権なし)
　3) Express (無料)
　4) Web (有料)
　5) Standard (有料)
　6) Enterprise (有料)
　7) Enterprise Core (有料)
　8) 小売販売チャネルを介してライセンスを購入し、入力するプロダクト キーを持っています。
～
エディションを入力してください(1-8): 3
～
SQL Server の言語の選択:
(1) English
(2) Deutsch
(3) Espanol
(4) Francais
(5) Italiano
(6) 日本語
(7) 한국어
(8) Portugues
(9) Русский
(10) 中文 – 简体
(11) 中文 （繁体）
オプション 1-11 を入力: 6
～
SQL Server システム管理者パスワードを入力してください:
SQL Server システム管理者パスワードを確認入力してください:
SQL Server を構成しています...
～
セットアップは正常に完了しました。SQL Server を起動しています。
</pre>
##ツール系のインストール
<pre>
$ sudo curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ sudo curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
$ sudo apt-get update 
$ sudo apt-get install mssql-tools unixodbc-dev
※ライセンスの確認で２回[はい]を押す
$ sudo apt-get update 
$ sudo apt-get install mssql-tools ※インストール済なので必要ない？
$ vi ~/.profile　で以下を追加する
export PATH=$PATH:/opt/mssql-tools/bin
$ source ~/.profile
$ env で追加されていることを確認(当然かぶっている)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/mssql-tools/bin
$ sqlcmd -S localhost -U SA -P '<YourPassword>'
$ ping ip_adddr -p 1433
</pre>
Windows版のSSMSより　サーバーのIPを直接指定で接続確認
※(たぶん)ブラウザーが無いため、SSMSの
　ネットワークサーバー
　　-> データーベースエンジン
　　からは見えないのぁ・・・
</pre>
##DSNの設定
<pre>
$ cat /etc/odbc.ini
[MSSQLDEMO]
Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1
Server = tcp:xxx.xxx.xxx.xxx
Server = tcp:192.168.5.48
Trace = No
Database = DEMO
Port = 1433
ClientCharset = UTF-8
----------------------------------------------------------------------
・項目の説明
[MSSQLDEMO]
\#ドライバーの説明
Description = SQL Server2017Express
\#ドライバーの場所
Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1
\#トレースするかの有無
Trace = No
\#データベースのIPアドレス
Server = tcp:xxx.xxx.xxx.xxx
\#データベース名
Database = DEMO
\#ポート番号 SQL Serverは通常 1433
Port = 1433
\#クライアント(Linux側)の文字コードセット
ClientCharset = UTF-8
----------------------------------------------------------------------
$ sudo odbcinst -i -d -f /etc/odbc.ini
odbcinst: Driver installed. Usage count increased to 1.
    Target directory is /etc
　　-i インストール
　　-d ドライバー
　　-f テンプレートファイル名
　　
$ sudo odbcinst -q -d
[ODBC Driver 17 for SQL Server]
[MSSQLDEMO]
　　-q 検索
　　-d ドライバー
　
$ sudo odbcinst -u -d -n MSSQLDEMO
MSSQLDEMO has been deleted (if it existed at all) because its usage count became zero
　　-u アンインストール
　　-n ドライバー又はDSN名
</pre>
##DBI::DBDでアクセスしてみる
<pre>
$ sudo apt-get install perl-doc
$ sudo apt install cpanminus
$ sudo cpanm install DBD::ODBC
$ sudo cpanm install DDP
$ sudo cpanm install DBI
</pre>
サンプルコード（テーブルは郵便番号を取り込んだもの）

```perl:test.pl
use strict;
use utf8;
use DBI;

my $dbh=DBI->connect('dbi:ODBC:MSSQLDEMO','demo','demo') or die $!;
my $sth=$dbh->prepare("select * from ZIPCODE") or die $dbh->errstr;

# 出力エラー対策
$sth->{LongTruncOk}=1;
$sth->{LongReadLen}=2000000;

$sth->execute or die $dbh->errstr;
while(my $arrayref = $sth->fetchrow_arrayref){
        use DDP;
        p $arrayref;
}
$sth->finish;
$dbh->disconnect;
```
$ perl samp.pl
##参考にしたのは以下のサイト
[クイック スタート: SQL Server をインストールし、Ubuntu でデータベースを作成](https://docs.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-2017)
[Linux 上の SQL Server の設定を環境変数で構成する](https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-configure-environment-variables?view=sql-server-linux-2017)
[Mssql conf ツールを使用して Linux 上の SQL Server を構成します](https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-configure-mssql-conf?view=sql-server-linux-2017)