sqlcmd による接続

ODBC ドライバーのダウンロード

sqlcmd ユーティリティは、Linux と macOS の Microsoft ODBC Driver for SQL Server で使用できます。

次のコマンドは、Windows 認証 (Kerberos) と SQL Server 認証の使用方法をそれぞれ示しています。

sqlcmd -E -Sxxx.xxx.xxx.xxx
sqlcmd -Sxxx.xxx.xxx.xxx -Uxxx -Pxxx

使用可能なオプション

Linux と macOS では、sqlcmd の次のオプションを使用できます。

-?
sqlcmd の使用状況を表示します。

-a
パケット サイズを要求します。

-b
エラーがある場合にバッチ ジョブを終了します。

-cbatch_terminator
バッチ ターミネータを指定します。

-C
サーバー証明書を信頼します。

-ddatabase_name
sqlcmd の開始時に USEdatabase_name ステートメントを発行します。

-D
sqlcmd -S オプションに渡された値が、データ ソース名 (DSN) として解釈されるようにします。 詳細については、この記事の最後の「sqlcmdbcp での DSN のサポート」を参照してください。

-e
入力スクリプトを標準出力デバイス (stdout) に書き込みます。

-E
信頼関係接続 (統合認証) を使用します。Linux クライアントまたは macOS クライアントからの統合認証を使用する信頼関係接続の作成の詳細については、「統合認証を使用する」を参照してください。

-fcodepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
入力と出力のコード ページを指定します。 コード ページ番号は、インストールされた Linux コード ページを指定する数値です。 (17.5.1.1 以降で利用可能)

-G
このスイッチは、Azure SQL データベース、Azure SQL Managed Instance、または Azure Synapse Analytics に接続し、Microsoft Entra ID (旧称 Azure Active Directory) 認証を使用してユーザーを認証するように指定する場合に、クライアントによって使用されます。 -P オプションと組み合わせるだけで、アクセス トークン認証 (v17.8 以降) を使用できます。 このオプションにより、 sqlcmd スクリプト変数 SQLCMDUSEAAD = true が設定されます。 -G スイッチには、sqlcmd バージョン 17.6 以降が必要です。 バージョンを判断するには、 sqlcmd -?を実行します。

重要

-G オプションは、Azure SQL データベース、Azure SQL Managed Instance、Azure Synapse Analytics にのみ適用されます。

現在、Microsoft Entra 対話型認証は、Linux または macOS ではサポートされていません。 Microsoft Entra 統合認証には、Microsoft ODBC Driver 17 for SQL Server バージョン 17.6.1 以降と、適切に構成された Kerberos 環境が必要です。

-hnumber_of_rows
列ヘッダーの間に出力する行数を指定します。

-H
ワークステーション名を指定します。

-iinput_file[,input_file[,...]]
SQL ステートメントまたはストアド プロシージャのバッチを含むファイルを指定します。

-I
SET QUOTED_IDENTIFIER 接続オプションを ON に設定します。

-k
制御文字を削除するか、置き換えます。

-Kapplication_intent
アプリケーションがサーバーに接続するときのワークロードのタイプを宣言します。 現在サポートされている値は、 ReadOnlyだけです。 -K を指定しない場合、sqlcmd では Always On 可用性グループのセカンダリ レプリカへの接続がサポートされません。 詳細については、Linux と macOS の ODBC ドライバー - 高可用性とディザスター リカバリーに関するページをご覧ください。

Note

-K は、CTP for SUSE Linux ではサポートされていません。 ただし、に渡される DSN ファイルでApplicationIntent=ReadOnlysqlcmd キーワードを指定できます。 詳細については、この記事の最後の「sqlcmdbcp での DSN のサポート」を参照してください。

-ltimeout
サーバーへの接続の試行時に、sqlcmd のログインがタイムアウトするまでの秒数を指定します。

-merror_level
stdout に送信されるエラー メッセージを制御します。

-Mmultisubnet_failover
SQL Server 2012 (11.x) 可用性グループまたは SQL Server 2012 (11.x) フェールオーバー クラスター インスタンスの可用性グループ リスナーに接続する際には、必ず -M を指定してください。 -M を指定すると、フェールオーバーを迅速に検出して、(現在) アクティブなサーバーに接続できます。 -M を指定しない場合、 -M はオフになります。 Always On 可用性グループの詳細については、Linux と macOS の ODBC ドライバー - 高可用性とディザスター リカバリーに関する記事を参照してください。

注意

-M は、CTP for SUSE Linux ではサポートされていません。 ただし、sqlcmd に渡される DSN ファイルで MultiSubnetFailover=Yes キーワードを指定できます。 詳細については、この記事の最後の「sqlcmdbcp での DSN のサポート」を参照してください。

-N[s|m|o]
接続暗号化モードをそれぞれ Strict、Mandatory、または Optional に設定します。 指定しない場合、既定値は mandatory です。 (sqlcmd 18.0 で [s|m|o] が追加)

-ooutput_file
sqlcmd からの出力を受け取るファイルを指定します。

-p
すべての結果セットのパフォーマンス統計を出力します。

-P
ユーザー パスワードを指定します。 -U なしで -G オプションと組み合わせて使用すると、アクセス トークン (v17.8 以降) を含むファイルが指定されます。 トークン ファイルは UTF-16LE (BOM なし) 形式である必要があります。

アクセス トークンは、さまざまな方法で取得できます。 アクセス トークンは、そのまま送信されるので、バイト単位で正しくなるようにすることが重要です。 アクセス トークンを取得するコマンドの例を次に示します。 このコマンドでは、Azure CLI と Linux コマンドが使用されており、適切な形式でファイルに保存されます。 システムまたはターミナルの既定のエンコードが ASCII または UTF-8 ではない場合は、iconv オプションの調整が必要になる場合があります。 結果のファイルを必ず慎重にセキュリティで保護し、不要になったら削除してください。

az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile

-qcommandline_query
sqlcmd の開始時にクエリを実行しますが、クエリの実行が完了しても終了しません。

-Qcommandline_query
sqlcmd の開始時にクエリを実行します。 クエリが終了すると sqlcmd は終了します。

-r
エラー メッセージを stderr にリダイレクトします。

-R
ドライバーがクライアントの地域別設定を使用して、通貨および日時データを文字データへ変換します。 現時点では、en_US (英語 (米国)) 書式設定のみを使用します。

-scolumn_separator_char
列の区切り文字を指定します。

-S [protocol:] server[,port]
接続する SQL Server インスタンスを指定します。または、-D が使用されている場合、DSN です。 Linux および macOS の ODBC ドライバーには -S が必要です。 有効なプロトコルの値は tcp だけです。

-tquery_timeout
コマンド (または SQL ステートメント) がタイムアウトになるまでの時間を秒数で指定します。

-u
input_file の形式が何であっても、output_file を Unicode 形式で格納するように指定します。

-U
login_id ユーザーのログイン ID を指定します。

-Verror_severity_level
ERRORLEVEL 変数を設定するために使用される重大度レベルを制御します。

-wcolumn_width
出力用の画面幅を指定します。

-W
列から後続の空白を削除します。

-x
変数の代入の無効化

-X
コマンド、スタートアップ スクリプト、および環境変数を無効にします。

-yvariable_length_type_display_width
sqlcmd のスクリプト変数 SQLCMDMAXFIXEDTYPEWIDTH を設定します。

-Yfixed_length_type_display_width
sqlcmd のスクリプト変数 SQLCMDMAXVARTYPEWIDTH を設定します。

-zpassword
パスワードを変更します。

-Zpassword
パスワードの変更と終了

使用可能なコマンド

現在のリリースでは、次のコマンドを使用できます。

  • [:]!!

  • :Connect

  • :Error

  • [:]EXIT

  • GO [count]

  • :Help

  • :List

  • :Listvar

  • :On Error

  • :Out

  • :Perftrace

  • [:]QUIT

  • :r

  • :RESET

  • :setvar

利用できないオプション

現在のリリースでは、次のオプションは使用できません。

-A
専用管理者接続 (DAC) を使用して SQL Server にログインします。 専用管理者接続 (DAC) を作成する方法については、「プログラミング ガイドライン」を参照してください。

-L
ローカルに構成されたサーバー コンピューターと、ネットワーク上でブロードキャストしているサーバー コンピューター名の一覧を表示します。

-v
sqlcmd スクリプトで使用できる sqlcmd スクリプト変数を作成します。

次の代替方法を使用できます。パラメーターを 1 つのファイル内に配置すると、それを別のファイルに追加することができます。 このメソッドにより、パラメーター ファイルを使用して値を置き換えることができます。 たとえば、次のコンテンツを使用して、a.sql というファイル (パラメーター ファイル) を作成します。

:setvar ColumnName object_id
:setvar TableName sys.objects

次に、置換のためのパラメーターを使用して、b.sql というファイルを作成します。

SELECT $(ColumnName) FROM $(TableName)

コマンド ラインで、次のコマンドを使用して a.sqlb.sqlc.sql へと結合します。

cat a.sql > c.sql

cat b.sql >> c.sql

sqlcmd を実行し、入力ファイルとして c.sql を使用します。

sqlcmd -S<...> -P<..> -U<..> -I c.sql

利用できないコマンド

現在のリリースでは、次のコマンドは利用できません。

  • :ED

  • :ServerList

  • :XML

sqlcmd と bcp での DSN のサポート

-D を指定した場合は、sqlcmd または bcp-S オプション (または sqlcmd の :Connect コマンド) でサーバー名ではなくデータ ソース名 (DSN) を指定できます。 -D を指定すると、sqlcmd または bcp が、-S オプションを使用して DSN で指定されたサーバーに接続されます。

システム DSN は、ODBC SysConfigDir ディレクトリ (標準インストールでは /etc/odbc.ini) 内の odbc.ini ファイルに格納されます。 ユーザー DSN は、ユーザーのホーム ディレクトリ (~/.odbc.ini) 内の .odbc.ini に格納されます。

Windows システムでは、システム DNS とユーザー DNS はレジストリに格納され、odbcad32.exe を介して管理されます。 ファイルの DSN は、bcp および sqlcmd ではサポートされません。

ドライバーによってサポートされるエントリの一覧については、「DSN と接続文字列のキーワードと属性」を参照してください。

DSN では、DRIVER エントリのみが必要ですが、リモート サーバーに接続するには、sqlcmd または bcp が SERVER 要素内に値を必要とします。 SERVER 要素が空であるか、DSN に存在しない場合は、sqlcmdbcp によって、ローカルシステム上の既定のインスタンスへの接続が試行されます。

Windows システムで bcp を使用する場合、SQL Server 2017 (14.x) 以前では、SQL Native Client 11 ドライバー (sqlncli11.dll) が必要であり、SQL Server 2019 (15.x) 以降では、Microsoft ODBC Driver 17 for SQL Server ドライバー (msodbcsql17.dll) が必要です。

DSN と sqlcmd または bcp コマンド ラインの両方で同じオプションが指定されている場合は、コマンドライン オプションが、DSN で使用される値をオーバーライドします。 たとえば、DSN に DATABASE エントリがあり、sqlcmd コマンドラインに -d が含まれる場合、 -d に渡される値が使用されます。 DSN で Trusted_Connection=yes が指定されている場合は、Kerberos 認証が使用され、ユーザー名 ( -U) とパスワード ( -P) は無視されます (指定されている場合)。

エイリアス alias isql="sqlcmd -D" を定義して、isql を呼び出す既存のスクリプトを、sqlcmd を使用するように変更できます。

関連項目

bcp による接続
リリース ノート