sqlcmd による接続
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
エラーがある場合にバッチ ジョブを終了します。
-c batch_terminator
バッチ ターミネータを指定します。
-C
サーバー証明書を信頼します。
-d database_name
sqlcmd
の開始時に USE
database_name ステートメントを発行します。
-D
sqlcmd
-S オプションに渡された値が、データ ソース名 (DSN) として解釈されるようにします。 詳細については、この記事の最後の「sqlcmd
と bcp
での DSN のサポート」を参照してください。
-e
入力スクリプトを標準出力デバイス (stdout) に書き込みます。
-E
信頼関係接続 (統合認証) を使用します。Linux クライアントまたは macOS クライアントからの統合認証を使用する信頼関係接続の作成の詳細については、「統合認証を使用する」を参照してください。
-f codepage | 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 環境が必要です。
-h number_of_rows
列ヘッダーの間に出力する行数を指定します。
-H
ワークステーション名を指定します。
-i input_file[,input_file[,...]]
SQL ステートメントまたはストアド プロシージャのバッチを含むファイルを指定します。
-I
SET QUOTED_IDENTIFIER
接続オプションを ON に設定します。
-k
制御文字を削除するか、置き換えます。
-K application_intent
アプリケーションがサーバーに接続するときのワークロードのタイプを宣言します。 現在サポートされている値は、 ReadOnlyだけです。 -K を指定しない場合、sqlcmd
では Always On 可用性グループのセカンダリ レプリカへの接続がサポートされません。 詳細については、Linux と macOS の ODBC ドライバー - 高可用性とディザスター リカバリーに関するページをご覧ください。
Note
-K は、CTP for SUSE Linux ではサポートされていません。 ただし、に渡される DSN ファイルでApplicationIntent=ReadOnlysqlcmd
キーワードを指定できます。 詳細については、この記事の最後の「sqlcmd
と bcp
での DSN のサポート」を参照してください。
-l timeout
サーバーへの接続の試行時に、sqlcmd
のログインがタイムアウトするまでの秒数を指定します。
-m error_level
stdout に送信されるエラー メッセージを制御します。
-M multisubnet_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 キーワードを指定できます。 詳細については、この記事の最後の「sqlcmd
と bcp
での DSN のサポート」を参照してください。
-N[s|m|o]
接続暗号化モードをそれぞれ Strict、Mandatory、または Optional に設定します。 指定しない場合、既定値は mandatory です。 (sqlcmd 18.0 で [s|m|o]
が追加)
-o output_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
-q commandline_query
sqlcmd
の開始時にクエリを実行しますが、クエリの実行が完了しても終了しません。
-Q commandline_query
sqlcmd
の開始時にクエリを実行します。 クエリが終了すると sqlcmd
は終了します。
-r
エラー メッセージを stderr にリダイレクトします。
-R
ドライバーがクライアントの地域別設定を使用して、通貨および日時データを文字データへ変換します。 現時点では、en_US (英語 (米国)) 書式設定のみを使用します。
-s column_separator_char
列の区切り文字を指定します。
-S [protocol:] server[,port]
接続する SQL Server インスタンスを指定します。または、-D が使用されている場合、DSN です。 Linux および macOS の ODBC ドライバーには -S が必要です。 有効なプロトコルの値は tcp だけです。
-t query_timeout
コマンド (または SQL ステートメント) がタイムアウトになるまでの時間を秒数で指定します。
-u
input_file の形式が何であっても、output_file を Unicode 形式で格納するように指定します。
-U
login_id ユーザーのログイン ID を指定します。
-V error_severity_level
ERRORLEVEL 変数を設定するために使用される重大度レベルを制御します。
-w column_width
出力用の画面幅を指定します。
-W
列から後続の空白を削除します。
-x
変数の代入の無効化
-X
コマンド、スタートアップ スクリプト、および環境変数を無効にします。
-y variable_length_type_display_width
sqlcmd
のスクリプト変数 SQLCMDMAXFIXEDTYPEWIDTH
を設定します。
-Y fixed_length_type_display_width
sqlcmd
のスクリプト変数 SQLCMDMAXVARTYPEWIDTH
を設定します。
-z password
パスワードを変更。
-Z password
パスワードの変更と終了
使用可能なコマンド
現在のリリースでは、次のコマンドを使用できます。
[:]!!
: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.sql
と b.sql
を c.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: 接続コマンド) でサーバー名ではなくデータ ソース名 (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 に存在しない場合は、sqlcmd
と bcp
によって、ローカルシステム上の既定のインスタンスへの接続が試行されます。
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
を使用するように変更できます。