適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric SQL Database
sqlcmd ユーティリティを使用すると、Transact-SQL ステートメントやシステム プロシージャ、スクリプト ファイルを使用可能なさまざまなモードで入力できます:
- コマンド プロンプト。
- クエリ エディターでの SQLCMD モード。
- Windows スクリプト ファイル。
- SQL Server エージェント ジョブのオペレーティング システム (
cmd.exe
) ジョブ ステップ。
注
Microsoft Entra ID は Azure Active Directory (Azure AD) の新しい名前ですが、既存の環境の中断を防ぐために、Azure AD は引き続き UI フィールド、接続プロバイダー、エラー コード、コマンドレットなどのハードコーディングされた要素に残ります。 この記事で、2 つの名前は同義です。
sqlcmd バリアント
sqlcmd には 2 つのバリエーションがあります。
sqlcmd (Go):
go-mssqldb
ベースの sqlcmd。 go-sqlcmd というスタイルが設定されている場合もあります。 このバージョンは、SQL Server とは別にダウンロードできるスタンドアロン ツールです。 Windows、macOS、Linux、およびコンテナーで実行されます。sqlcmd (ODBC): プラットフォームに合わせた ODBC ベースの sqlcmd。SQL Server または Microsoft コマンド ライン ユーティリティで使用でき、Linux 上の
mssql-tools
パッケージの一部です。 また、Windows、macOS、Linux、コンテナーでも実行されます。
システムにインストールされている sqlcmd のバリアントとバージョンを確認するには、 sqlcmd ユーティリティのインストール済みバージョンを確認するを参照してください。
sqlcmd を取得する方法については、「sqlcmd ユーティリティのダウンロードとインストール」を参照してください。
TDS 8.0 のサポート
SQL Server 2025 (17.x) プレビューでは、 sqlcmd ユーティリティの TDS 8.0 サポートが導入されています。
構文
Usage:
sqlcmd [flags]
sqlcmd [command]
Examples:
# Install/Create, Query, Uninstall SQL Server
sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
sqlcmd open ads
sqlcmd query "SELECT @@version"
sqlcmd delete
# View configuration information and connection strings
sqlcmd config view
sqlcmd config cs
Available Commands:
completion Generate the autocompletion script for the specified shell
config Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
create Install/Create SQL Server, Azure SQL, and Tools
delete Uninstall/Delete the current context
help Help about any command
open Open tools (e.g ADS) for current context
query Run a query against the current context
start Start current context
stop Stop current context
Flags:
-?, --? help for backwards compatibility flags (-S, -U, -E etc.)
-h, --help help for sqlcmd
--sqlconfig string configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
--verbosity int log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
--version print version of sqlcmd
Use "sqlcmd [command] --help" for more information about a command.
sqlcmd 構文の詳細と使用方法については、ODBC sqlcmd の構文に関するページを参照してください。
sqlcmd (ODBC) からの破壊的変更
sqlcmd (Go) では、いくつかのスイッチと動作が変更されました。 下位互換性に関する欠落したフラグの最新の一覧については、バック互換性フラグの実装の優先順位付けに関する GitHub のページを参照してください。
以前のバージョンの sqlcmd (Go) では、
-P
スイッチが一時的に削除され、SQL Server 認証のパスワードが次のメカニズムでしか提供できませんでした:SQLCMDPASSWORD
環境変数:CONNECT
コマンド- メッセージが表示されたら、ユーザーはパスワードを入力して接続を完了できます
-r
には0
または1
引数が必要です-R
スイッチが削除されました。-I
スイッチが削除されました。 引用符で囲まれた識別子の動作を無効にするには、スクリプトにSET QUOTED IDENTIFIER OFF
を追加します。-N
は、暗号化の選択を指定するtrue
、false
、またはdisable
のいずれかを指定できる文字列値を受け取ります。 (default
は、パラメーターを省略するのと同じです)-N
と-C
が指定されていない場合、sqlcmd では、サーバー証明書が検証されずにサーバーと認証がネゴシエートされます。-N
が指定されていて、-C
が指定されていない場合、sqlcmd では、サーバー証明書の検証が必須となります。 暗号化のfalse
値でも、ログイン パケットの暗号化を実行できます。-N
と-C
の両方が指定されている場合、sqlcmd では、暗号化のネゴシエーションのためにそれらの値が使用されます。- クライアント/サーバーの暗号化ネゴシエーションについて詳しくは、「MS-TDS PRELOGIN」を参照してください。
重要
SQL Server 2025 (17.x) プレビューでは、
-N
をo
(optional
の場合)、m
(mandatory
、既定値)、またはs
(strict
の場合) にすることができます。-N
を含めない場合は、-Nm
(mandatory
の場合) が既定です。 これは、SQL Server 2022 (16.x) 以前のバージョンからの破壊的変更です。-u
: 生成される Unicode 出力ファイルに UTF-16 リトル エンディアン バイト オーダー マーク (BOM) が書き込まれています。一部のデータ型の列ヘッダーの配置など、
OSQL
との互換性を維持するために保持されていた一部の動作が変更されました。すべてのコマンドを 1 行に収める必要があります。これは
EXIT
でも同じです。 対話モードでは、コマンドの左かっこや引用符はチェックされず、連続する行の入力は求められません。 この動作は、EXIT(query)
によって実行されるクエリが複数行にまたがることができる ODBC バージョンとは異なります。
sqlcmd (Go) ユーティリティからの接続は TCP 接続に制限されます。 現在のところ、名前付きパイプは go-mssqldb
ドライバーではサポートされていません。
機能強化
:Connect
には、Azure SQL Database の認証方法 (-G
、SqlAuthentication
、ActiveDirectoryDefault
、ActiveDirectoryIntegrated
、ActiveDirectoryServicePrincipal
、ActiveDirectoryManagedIdentity
) のいずれかを選択する省略可能なActiveDirectoryPassword
パラメーターがあります。 詳細については、「 sqlcmd での Microsoft Entra ID による認証」を参照してください。-G
が指定されていない場合、-U
ユーザー名パラメーターの有無に応じて、統合セキュリティまたは SQL Server 認証が使用されます。--driver-logging-level
コマンド ライン パラメーターを使用すると、go-mssqldb
ドライバーからのトレースを確認できます。 すべてのトレースを確認するには、64
を使用します。sqlcmd (Go) では、垂直形式を使用して結果を出力できます。
-F vertical
コマンド ライン スイッチを使用して設定します。SQLCMDFORMAT
スクリプト変数を使って制御することもできます。注
これは、
-F
(ODBC) の スイッチとは異なり、証明書でホスト名を指定するために-N
と共に使用されます。
コマンド ライン オプション
次の表に、sqlcmd で使用できるコマンドライン オプションと、サポートするオペレーティング システムを示します。
ログイン関連のオプション
-ある
適用対象: Windows のみ。 Linux と macOS はサポートされません。
専用管理者接続 (DAC) を使用して SQL Server にサインインします。 この種類の接続は、サーバーのトラブルシューティングで使用されます。 この接続は、DAC をサポートしているサーバー コンピューターでのみ機能します。 DAC を使用できない場合は、sqlcmd はエラー メッセージを生成して終了します。 DAC の詳細については、「 データベース管理者の診断接続」を参照してください。 -A
オプションは -G
オプションではサポートされていません。 -A
を使用して Azure SQL Database に接続する場合は、論理 SQL サーバーの管理者である必要があります。 DAC は Microsoft Entra 管理者は使用できません。
注
macOS または Linux で専用管理者接続 (DAC) を作成する方法については、「プログラミング ガイドライン」を参照してください。
-c
クライアントでこのオプションを使用して、サーバー証明書を検証せずに暗黙的に信頼するようにクライアントを構成できます。 このオプションは、ADO.NET オプションの TRUSTSERVERCERTIFICATE = true
と同等です。
sqlcmd (Go) ユーティリティでは、次の条件も適用されます:
-N
と-C
が指定されていない場合、sqlcmd では、サーバー証明書が検証されずにサーバーと認証がネゴシエートされます。-N
が指定されていて、-C
が指定されていない場合、sqlcmd では、サーバー証明書の検証が必須となります。 暗号化のfalse
値でも、ログイン パケットの暗号化を実行できます。-N
と-C
の両方が指定されている場合、sqlcmd では、暗号化のネゴシエーションのためにそれらの値が使用されます。
-d db_name
USE <db_name>
の開始時に ステートメントを実行します。 このオプションにより、sqlcmd スクリプト変数 SQLCMDDBNAME
が設定されます。 このパラメーターにより初期データベースが指定されます。 既定値は、ログインの既定データベースのプロパティです。 データベースが存在しない場合は、エラー メッセージが生成され、sqlcmd は終了します。
-d
-S
に指定されたサーバー名を、ホスト名としてではなく、DSN として解釈します。 詳細については、「sqlcmd と bcp での DSN のサポート」を参照してください。
注
-D
オプションは、Linux および macOS のクライアントでのみ使用できます。 これは Windows クライアントで廃止されたオプションを指し、これまでに削除され、無視されています。
-l login_timeout
サーバーに接続を試みたときに、sqlcmd が ODBC ドライバーにログインするまでのタイムアウトを秒数で指定します。 このオプションにより、sqlcmd スクリプト変数 SQLCMDLOGINTIMEOUT
が設定されます。 sqlcmd でのログインに関する既定のタイムアウトは 8 秒です。 -G
オプションを使用して、Azure SQL Database または Azure Synapse Analytics に接続し、Microsoft Entra ID で認証する場合は、タイムアウト値を 30 秒以上にすることをお勧めします。 ログイン タイムアウトは、0
から 65534
の数値にする必要があります。 指定した値が数値以外の場合、またはその範囲外の場合、sqlcmd によりエラー メッセージが生成されます。 この値に 0
を指定すると、タイムアウトは無制限になります。
-E
ユーザー名とパスワードを使用せずにセキュリティ接続を使用して SQL Server にサインインします。 既定では、-E
を指定しないと sqlcmd でセキュリティ接続オプションが使用されます。
-E
オプションを使用すると、SQLCMDPASSWORD
などのユーザー名とパスワード用に使用できる環境変数の設定が無視されます。 -E
オプションが -U
オプションまたは -P
オプションと共に使用されると、エラー メッセージが生成されます。
注
Linux クライアントまたは macOS クライアントからの統合認証を使用する信頼関係接続の作成の詳細については、「統合認証を使用する」を参照してください。
-g
列の暗号化設定を Enabled
に設定します。 詳細については、「 Always Encrypted」を参照してください。 Windows 証明書ストアに格納されているマスター キーのみがサポートされます。 -g
オプションには、sqlcmd バージョン 13.1 以降が必要です。 バージョンを判断するには、sqlcmd -?
を実行します。
-G
このオプションは、Azure SQL Database または Azure Synapse Analytics に接続し、Microsoft Entra 認証を使用してユーザーを認証するように指定する場合に、クライアントによって使用されます。 このオプションにより、sqlcmd スクリプト変数 SQLCMDUSEAAD = true
が設定されます。 -G
オプションには、sqlcmd バージョン 13.1 以降が必要です。 バージョンを判断するには、sqlcmd -?
を実行します。 詳細については、 Azure SQL の Microsoft Entra 認証に関するページを参照してください。 -A
オプションは -G
オプションではサポートされていません。
-G
オプションは、Azure SQL Database と Azure Synapse Analytics にのみ適用されます。
現在、Microsoft Entra 対話型認証は、Linux または macOS ではサポートされていません。 Microsoft Entra 統合認証では、 ODBC Driver for SQL Server バージョン 17.6.1 以降と 、適切に構成された Kerberos 環境をダウンロードする必要があります。
Microsoft Entra 認証の詳細については、「 sqlcmd での Microsoft Entra ID による認証」を参照してください。
-H workstation_name
ワークステーション名です。 このオプションにより、sqlcmd スクリプト変数 SQLCMDWORKSTATION
が設定されます。 ワークステーション名は hostname
カタログ ビューの sys.sysprocesses
列に一覧表示され、ストアド プロシージャ sp_who
を使用して取得できます。 このオプションが指定されていない場合の既定値は、現在のコンピューター名になります。 この名前は、異なる sqlcmd セッションを識別する場合に使用できます。
-j
画面に生のエラー メッセージを出力します。
-K application_intent
アプリケーションがサーバーに接続するときのワークロードのタイプを宣言します。 現在サポートされている値は、ReadOnly
です。 -K
を指定しない場合、sqlcmd では可用性グループのセカンダリ レプリカへの接続がサポートされません。 詳細については、「Always On 可用性グループのセカンダリ レプリカに読み取り専用の負荷を移す」を参照してください。
注
-K
は SUSE Linux Enterprise Server (SLES) でサポートされていません。 ただし、ApplicationIntent=ReadOnly
に渡される DSN ファイルで キーワードを指定できます。 詳細については、この記事の後半の「sqlcmd と bcp での DSN のサポート」を参照してください。
詳細については、Linux と macOS の高可用性とディザスター リカバリーに関するページをご覧ください。
-M multisubnet_failover
SQL Server 可用性グループまたは SQL Server フェールオーバー クラスター インスタンスの可用性グループ リスナーに接続する際には、必ず -M
を指定してください。 -M
を指定すると、(現在) アクティブなサーバーを迅速に検出して接続できます。 -M
が指定されていない場合、-M
はオフです。
詳細については、以下を参照してください。
- Always On 可用性グループ リスナーに接続する
- Always On 可用性グループの作成と構成の参照
- フェールオーバー クラスタリングと Always On 可用性グループ (SQL Server)
- Always On 可用性グループのセカンダリ レプリカに読み取り専用の負荷を移す
注
-M
は SUSE Linux Enterprise Server (SLES) でサポートされていません。 ただし、MultiSubnetFailover=Yes
に渡される DSN ファイルで キーワードを指定できます。 詳細については、この記事の後半の「sqlcmd と bcp での DSN のサポート」を参照してください。
詳細については、Linux と macOS の高可用性とディザスター リカバリーに関するページをご覧ください。
-N
クライアントでこのオプションを使用して、暗号化された接続を要求できます。
sqlcmd (Go) ユーティリティの場合、-N
は、暗号化の選択を指定するtrue
、false
、またはdisable
のいずれかの文字列値を受け取ります。 (default
は、パラメーターを省略するのと同じです):
注
Linux と macOS で、[s|m|o]
は sqlcmd 18.0 に追加されました。 -N
は、 o
( optional
の場合)、 m
( mandatory
、既定値)、または s
( strict
の場合) です。 SQL Server 2025 (17.x) プレビューでは、 -N
を含めない場合は、 -Nm
( mandatory
の場合) が既定です。 これは、SQL Server 2022 (16.x) 以前のバージョンからの破壊的変更であり、 -No
が既定です。
-N
と-C
が指定されていない場合、sqlcmd では、サーバー証明書が検証されずにサーバーと認証がネゴシエートされます。-N
が指定されていて、-C
が指定されていない場合、sqlcmd では、サーバー証明書の検証が必須となります。 暗号化のfalse
値でも、ログイン パケットの暗号化を実行できます。-N
と-C
の両方が指定されている場合、sqlcmd では、暗号化のネゴシエーションのためにそれらの値が使用されます。sqlcmd (ODBC) では、
-F
を使用して証明書のホスト名を指定します。 次に例を示します:sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.com
注
これは、垂直形式を使用して結果を出力するために使用される
-F
(Go) のスイッチとは異なります。
-P パスワード
ユーザーが指定したパスワード。 パスワードでは大文字と小文字が区別されます。 -U
オプションを使用する場合、-P
オプションは使用されず、SQLCMDPASSWORD
環境変数が設定されていない場合、sqlcmd はユーザーにパスワードを要求します。 null (空白) パスワードは使わないことをお勧めしますが、パラメーター値に連続する二重引用符のペア (""
) を使って、null パスワードを指定できます。
重要
-P
の使用は安全でないと見なされます。 コマンド ラインでパスワードを指定しないようにしてください。 または、SQLCMDPASSWORD
環境変数を使用するか、-P
オプションを省略してパスワードを対話的に入力します。
強力なパスワードを使用することをお勧めします。
パスワード プロンプトは、次のようにパスワード プロンプトをコンソールに出力することによって表示されます: Password:
ユーザーが行った入力は表示されません。 つまり、入力時には何も表示されず、カーソルが移動しません。
SQLCMDPASSWORD
環境変数を使用して、現在のセッションに既定のパスワードを設定できます。 したがって、パスワードをバッチ ファイルにハード コードする必要はありません。 次の例では、まずコマンド プロンプトで SQLCMDPASSWORD
変数を設定してから sqlcmd ユーティリティにアクセスします。
コマンド プロンプトで、次のコマンドを入力します。 <password>
を有効なパスワードに置き換えます。
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
ユーザー名とパスワードの組み合わせが正しくない場合は、エラー メッセージが生成されます。
注
OSQLPASSWORD
環境変数は下位互換性を維持しています。 SQLCMDPASSWORD
環境変数は OSQLPASSWORD
環境変数よりも優先されます。 これにより、sqlcmd と osql を競合することなく組み合わせて使用できます。 古いスクリプトは引き続き機能します。
-P
オプションが -E
オプションと同時に使用されると、エラー メッセージが生成されます。
-P
オプションの後に複数の引数があると、エラー メッセージが生成され、プログラムが終了します。
特殊文字を含むパスワードでは、エラー メッセージが生成される可能性があります。 -P
を使用する場合は特殊文字をエスケープするか、代わりに SQLCMDPASSWORD
環境変数を使用する必要があります。
Linux と macOS で、-G
なしで -U
オプションと組み合わせて使用すると、-P
ではアクセス トークン (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
-S [protocol:]server[\instance_name][,port]
接続先となる SQL Server のインスタンスを指定します。 sqlcmd スクリプト変数 SQLCMDSERVER
が設定されます。
そのサーバー コンピューター上の SQL Server の既定のインスタンスに接続するには、server_name を指定します。 そのサーバー コンピューター上の SQL Server の名前付きインスタンスに接続するには、server_name[\instance_name] を指定します。 サーバー コンピューターを指定しない場合、sqlcmd は、ローカル コンピューター上にある SQL Server の既定のインスタンスに接続します。 ネットワーク上のリモート コンピューターから sqlcmd を実行するときは、このオプションが必要です。
protocol には、tcp
(TCP/IP)、lpc
(共有メモリ)、または np
(名前付きパイプ) を設定できます。
sqlcmd を実行するときに server_name[\instance_name] を指定しなかった場合は、SQL Server により SQLCMDSERVER
環境変数がチェックされ、その値が使われます。
注
OSQLSERVER
環境変数は下位互換性を維持しています。 SQLCMDSERVER
環境変数は OSQLSERVER
環境変数よりも優先されます。 これにより、sqlcmd と osql を競合することなく組み合わせて使用できます。 古いスクリプトは引き続き機能します。
Linux および macOS の ODBC ドライバーには -S
が必要です。 有効なプロトコルの値は tcp
だけです。
-U login_id
ログイン名または包含データベースのユーザー名です。 包含データベースのユーザーの場合、データベース名のオプション (-d
) を指定する必要があります。
注
OSQLUSER
環境変数は下位互換性を維持しています。 SQLCMDUSER
環境変数は OSQLUSER
環境変数よりも優先されます。 これにより、sqlcmd と osql を競合することなく組み合わせて使用できます。 古いスクリプトは引き続き機能します。
-U
オプションも -P
オプションも指定しないと、sqlcmd は Windows 認証モードを使用して接続を試みます。 認証は sqlcmdを実行しているユーザーの Windows アカウントに基づきます。
-U
オプションが -E
オプション (この記事の後半で説明) と同時に使用されると、エラー メッセージが生成されます。 -U
オプションの後に複数の引数があると、エラー メッセージが生成され、プログラムが終了します。
-z new_password
パスワードを変更します。 <oldpassword>
を古いパスワードに置き換え、<newpassword>
を新しいパスワードに置き換えます。
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
-Z new_password
パスワードを変更して終了します。 <oldpassword>
を古いパスワードに置き換え、<newpassword>
を新しいパスワードに置き換えます。
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
入力または出力のオプション
-f コードページ |i:コードページ[,o:コードページ] |o:コードページ[,i:コードページ]
入力と出力のコード ページを指定します。 コード ページ番号は、インストールされた Windows コード ページを指定する数値です。
コードページには次の変換規則があります:
コード ページを指定しないと、入力ファイルが変換不要の Unicode ファイルでない限り、sqlcmd では、入力ファイルと出力ファイルの両方に現在のコード ページが使用されます。
sqlcmd では、ビッグ エンディアンとリトル エンディアンの両方の Unicode 入力ファイルが自動的に認識されます。
-u
オプションを指定すると、出力は常にリトルエンディアン Unicode になります。出力ファイルを指定しないと、出力コード ページがコンソールのコード ページになります。 この方法では、コンソールに出力が正しく表示されます。
複数の入力ファイルの場合、同じコード ページが指定されているものと見なされます。 Unicode 入力ファイルと Unicode 以外の入力ファイルを混在させることができます。
chcp
のコード ページを確認するには、コマンド プロンプトに「cmd.exe
」と入力します。
注
Linux でコード ページ番号は、インストールされた Linux コード ページを指定する数値です (17.5.1.1 以降で利用可能)。
-i input_file[,input_file2...]
Transact-SQL ステートメントまたはストアド プロシージャのバッチを含むファイルを指定します。 複数のファイルを指定して、順番に読み取って処理することができます。 ファイル名とファイル名の間には空白を使わないでください。 sqlcmd により、最初に、指定したすべてのファイルが存在しているかどうかがチェックされます。 1 つ以上のファイルが存在していない場合、sqlcmd は終了します。 -i
と -Q
/-q
オプションは同時に指定できません。
注
-i
オプションの後に 1 つ以上の追加パラメーターを使用する場合は、パラメーターと値の間にスペースを使用する必要があります。 これは、sqlcmd (Go) の既知の問題です。
パスの例:
-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"
空白を含むファイル パスは、引用符で囲む必要があります。
このオプションは複数使用できます:
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
-o output_file (出力ファイル)
sqlcmdからの出力を受信するファイルを指定します。
-u
が指定されている場合は、output_file は Unicode 形式で格納されます。 ファイル名が無効な場合は、エラー メッセージが生成され、sqlcmd が終了します。 sqlcmd は、同じファイルに対する複数の sqlcmd プロセスの同時書き込みはサポートしていません。 出力ファイルが破損しているか、不適切なファイルです。 -f
オプションは、ファイル形式にも関連します。 このファイルが存在しない場合は作成されます。 以前の sqlcmd セッションで同じ名前のファイルが作成されていた場合は、上書きされます。 ここで指定するファイルは stdout
ファイルではありません。 stdout
ファイルが指定されている場合、このファイルは使用されません。
パスの例:
-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"
空白を含むファイル パスは、引用符で囲む必要があります。
-r[0 | 1]
エラー メッセージ出力を画面にリダイレクトします (stderr
)。 パラメーターを指定しない場合や、0
を指定した場合は、重大度レベル 11 以上のエラー メッセージだけがリダイレクトされます。 1
を指定した場合は、PRINT
を含むすべてのエラー メッセージ出力がリダイレクトされます。 -o
を使用する場合、このオプションの影響はありません。 既定では、メッセージは stdout
に送られます。
注
sqlcmd (Go) ユーティリティの場合、-r
には 0
または 1
引数が必要です。
-R
適用対象: ODBC sqlcmd のみ。
sqlcmd により、クライアントのロケールに基づいて SQL Server から取得された数値、通貨、日付、および時刻の各列がローカライズされます。 既定では、これらの列はサーバーの地域別設定を使用して表示されます。
注
現時点で、Linux と macOS で -R
は en_US
(英語 (米国)) 書式設定のみを使用します。
-U
input_file の形式に関係なく、output_fileを Unicode 形式で格納するように指定します。
注
sqlcmd (Go) ユーティリティでは、生成される Unicode 出力ファイルに UTF-16 リトルエンディアン バイトオーダー マーク (BOM) が書き込まれています。
クエリ実行オプション
-E
入力スクリプトを標準出力デバイス (stdout
) に書き込みます。
-I
適用対象: ODBC sqlcmd のみ。
SET QUOTED_IDENTIFIER
接続オプションを ON
に設定します。 既定の設定は OFF
です。 詳細については、「SET QUOTED_IDENTIFIER」を参照してください。
注
sqlcmd (Go) ユーティリティで、引用符で囲まれた識別子の動作を無効にするには、スクリプトに SET QUOTED IDENTIFIER OFF
を追加します。
-q "コマンドラインクエリ"
sqlcmd の起動時にクエリを実行しますが、クエリが完了しても sqlcmd は終了しません。 セミコロンで区切られた複数のクエリを実行できます。 次の例で示すように、クエリを引用符で囲みます。
コマンド プロンプトに、次のコマンドを入力します:
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
重要
クエリでは GO
ターミネータを使用しないでください。
このオプションと共に -b
を指定すると、sqlcmd はエラーで終了します。 この記事の-b
に の説明があります。
-Q "コマンドラインクエリ"
sqlcmd の起動時にクエリを実行し、sqlcmdを即時終了します。 セミコロンで区切られた複数のクエリを実行できます。
次の例で示すように、クエリを引用符で囲みます。
コマンド プロンプトに、次のコマンドを入力します:
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
重要
クエリでは GO
ターミネータを使用しないでください。
このオプションと共に -b
を指定すると、sqlcmd はエラーで終了します。 この記事の-b
に の説明があります。
-t query_timeout
コマンド (または Transact-SQL ステートメント) の実行待ち時間を秒単位で指定します。このオプションにより、sqlcmd スクリプト変数 SQLCMDSTATTIMEOUT
が設定されます。 query_timeout 値が指定されていない場合、コマンドはタイムアウトしません。query_timeout は、1
から 65534
の数値にする必要があります。 指定した値が数値以外の場合、またはその範囲外の場合、sqlcmd によりエラー メッセージが生成されます。
注
実際のタイムアウト値は、指定した query_timeout 値と数秒で異なる場合があります。
-v var = value [ var = value... ]
適用対象: Windows のみ。 Linux と macOS はサポートされません。
sqlcmd スクリプトで使用できる sqlcmd スクリプト変数を作成します。
値に空白が含まれる場合は、値を引用符で囲みます。 複数の <var>="<value>"
値を指定することができます。 指定した値にエラーが生じた場合は、sqlcmd は、エラー メッセージを生成してから終了します。
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
-X
sqlcmd ではスクリプト変数が無視されます。 このパラメーターは、スクリプトに、通常の変数と同じ形式の文字列を含む可能性がある多数の INSERT
ステートメント ($(<variable_name>)
など) が含まれている場合に便利です。
形式のオプション
-h headers
列ヘッダーの間に出力する行数を指定します。 既定では、各クエリの結果に対して、ヘッダーは 1 つだけ表示されます。 このオプションにより、sqlcmd スクリプト変数 SQLCMDHEADERS
が設定されます。 ヘッダーを出力しない場合は、-1
を指定します。 有効でない値があると、sqlcmd はエラー メッセージを生成してから終了します。
-k [1 | 2]
タブ、改行文字などのすべての制御文字を出力から削除します。 このパラメーターにより、データが返されたときの列の形式が維持されます。
-k
は制御文字を削除します。-k1
は、各制御文字をスペースに置き換えます。-k2
は、連続する制御文字を 1 つのスペースに置き換えます。
-s col_separator
列の区切り文字を指定します。 既定では、空白になっています。 このオプションにより、sqlcmd スクリプト変数 SQLCMDCOLSEP
が設定されます。 アンパサンド (&
)、セミコロン (;
) など、オペレーティング システムで特別な意味を持つ文字を使用する場合は、その文字を引用符 ("
) で囲みます。 列の区切り文字には、任意の 8 ビットの文字を指定できます。
-w screen_width
出力用の画面幅を指定します。 このオプションにより、sqlcmd スクリプト変数 SQLCMDCOLWIDTH
が設定されます。 列幅は 8
よりも大きくかつ 65536
よりも小さい値にする必要があります。 指定した列幅が範囲外の場合、sqlcmd はエラー メッセージを生成します。 既定の幅は 80 文字です。 指定した列幅を超えると、出力行は次の列に折り返されます。
-w
このオプションは、列から後続の空白を削除します。 他のアプリケーションにエクスポートするデータを準備するときは、-s
オプションと同時にこのオプションを使用します。 -y
または -Y
オプションでは使用できません。
-y variable_length_type_display_width
sqlcmd スクリプト変数 SQLCMDMAXVARTYPEWIDTH
を設定します。 既定では、256
です。 長い可変長のデータ型に返される文字数を制限します:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- xml
- ユーザー定義のデータ型 (UDT)
- テキスト
- エヌテキスト
- 画像
UDT は実装によって固定長にもなります。 固定長の UDT の長さが display_width よりも短い場合、返される UDT の値は影響を受けません。 ただし、display_widthよりも長い場合は、出力は切り捨てられます。
注意
返されるデータのサイズによって、サーバーとネットワークの両方に重大なパフォーマンスの問題が発生する可能性があるため、-y 0
オプションは十分注意して使用してください。
-Y fixed_length_type_display_width
sqlcmd スクリプト変数 SQLCMDMAXFIXEDTYPEWIDTH
を設定します。 既定値は 0
(無制限) です。 次のデータ型に返される文字数を制限します:
- char(n)、ここで 1 <= n<= 8000
- nchar(n)、ただし 1 <= n<= 4000
- varchar(n)、ただし 1 <= n<= 8000
- nvarchar(n)、ただし 1 <= n<= 4000
- varbinary(n)、ただし 1 <= n<= 4000
- sql_variant
エラー報告のオプション
-b
エラーが発生したときに、sqlcmd を終了し、DOS ERRORLEVEL
値を返すように指定します。 SQL Server のエラー メッセージの重大度が 10 よりも高い場合、ERRORLEVEL
変数に返される値は 1
です。それ以外の場合は、0
の値が返されます。 -V
に加えて -b
オプションが設定されている場合、 を使用して設定した値よりも重大度が低いときは、-V
がエラーを報告しません。 コマンド プロンプト バッチ ファイルにより ERRORLEVEL
の値をテストすることができ、エラーを適切に処理できます。 sqlcmd は重大度レベル 10 (情報メッセージ) に対してはエラーを報告しません。
sqlcmd スクリプトに正しくないコメントや構文エラーが含まれている場合やスクリプト変数が不足している場合、返される ERRORLEVEL
は 1
です。
-m error_level
stdout
に送信されるエラー メッセージを制御します。 重大度レベルがこのレベル以上のメッセージが送信されます。 この値を -1
に設定すると、情報メッセージを含めすべてのメッセージが送信されます。 -m
と -1
の間に空白は使用できません。 たとえば、-m-1
は有効ですが、-m -1
は違います。
このオプションでは、sqlcmd スクリプト変数 SQLCMDERRORLEVEL
も設定されます。 この変数の既定値は 0
です。
-V エラーの重大度レベル
ERRORLEVEL
変数を設定するために使用される重大度レベルを制御します。 重大度レベルがこの値以上のエラー メッセージによって、ERRORLEVEL
が設定されます。 0 より小さい値は 0
と報告されます。 バッチ ファイルおよび CMD ファイルを使用して、ERRORLEVEL
変数の値をテストできます。
その他のオプション
-a packet_size
異なるサイズのパケットを要求します。 このオプションにより、sqlcmd スクリプト変数 SQLCMDPACKETSIZE
が設定されます。 packet_size には、512
から 32767
の値を指定する必要があります。 既定では、4096
です。 大きなパケット サイズを指定すると、GO
コマンド間に多数の Transact-SQL ステートメントが含まれているスクリプトの実行パフォーマンスが向上します。 既定値よりも大きいパケット サイズを要求できます。 ただし、要求が拒否された場合、sqlcmd はサーバーの既定のパケット サイズを使用します。
-c batch_terminator
バッチ ターミネータを指定します。 既定では、GO
だけが入力されている行があると、コマンドが終了し、SQL Server に送られます。 バッチ ターミネータをリセットする場合、Transact-SQL の予約キーワードやオペレーティング システムで特別な意味を持つ文字は、先頭に円記号が付いているかどうかに関係なく、使わないでください。
-L[c]
適用対象: Windows のみ。 Linux と macOS はサポートされません。
ローカルに構成されたサーバー コンピューターと、ネットワーク上でブロードキャストしているサーバー コンピューター名の一覧を表示します。 このパラメーターは、他のパラメーターと組み合わせて使うことはできません。 一覧表示できるサーバー コンピューターの最大数は 3,000 です。 バッファーのサイズが原因でサーバーの一覧が切り捨てられる場合は、警告メッセージが表示されます。
注
ネットワークでのブロードキャストの性質上、sqlcmd は、すべてのサーバーからタイムリーな応答を受け取らない可能性があります。 そのため、返されるサーバーのリストは、このオプションの実行ごとに異なる可能性があります。
省略可能なパラメーター c
を指定すると、出力結果には Servers:
ヘッダー行が含まれません。このため、各サーバー行は、先頭に空白がない状態で一覧表示されます。 この表示はクリーン アウトプットと呼ばれます。 クリーン アウトプットを使用すると、スクリプト言語の処理パフォーマンスが向上します。
-p[1]
すべての結果セットのパフォーマンス統計を出力します。 パフォーマンス統計の形式の例を次に示します:
Network packet size (bytes): n
x xact[s]:
Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)
各値の説明:
x
= SQL Server によって処理されるトランザクション数。t1
= すべてのトランザクションにかかる合計時間。t2
= 単一のトランザクションにかかる平均時間。t3
= 1 秒あたりの平均トランザクション数。
すべての時間はミリ秒単位です。
省略可能なパラメーター 1
を指定した場合は、統計の出力形式は、スプレッドシートへ容易にインポートできる、またはスクリプトによって処理できる、コロンで区切られた形式となります。
省略可能なパラメーターが 1
以外の値の場合は、エラーが生成され、 sqlcmd は終了します。
-X[1]
sqlcmd がバッチ ファイルから実行される場合に、システムのセキュリティを損なう可能性のあるコマンドを無効にします。 無効なコマンドも認識されます。 sqlcmd は警告メッセージを表示して継続します。 省略可能なパラメーターを 1
に指定すると、sqlcmd はエラー メッセージを生成して終了します。 -X
オプションを使用した場合に無効になるコマンドは次のとおりです:
ED
!!
命令
-X
オプションを指定すると、環境変数が sqlcmd に渡されなくなります。 また、SQLCMDINI
スクリプト変数を使用して指定した、スタートアップ スクリプトも実行できなくなります。 sqlcmd スクリプト変数の詳細については、「sqlcmd - スクリプト変数を使う」を参照してください。
-?
sqlcmd のバージョンと sqlcmd オプションの構文の概要を表示します。
注
macOS では、代わりに sqlcmd '-?'
(引用符付き) を実行します。
解説
オプションは、構文の例に示されている順序に従って使う必要はありません。
注
-i
オプションの後に 1 つ以上の追加パラメーターを使用する場合は、パラメーターと値の間にスペースを使用する必要があります。 これは、sqlcmd (Go) の既知の問題です。
複数の結果が返される場合は、sqlcmd は同じバッチの各結果セットの間に空白行を 1 行ずつ出力します。 また、<x> rows affected
というメッセージは、そのメッセージが実行したステートメントに該当する場合にだけ表示されます。
sqlcmd を対話的に使用するには、コマンド プロンプトで、sqlcmd
とこの記事で前述したオプションを入力します。 詳細については、「 sqlcmd の使用」を参照してください。
注
-l
、-Q
、-Z
、-i
のオプションを使用すると、sqlcmd は実行後に終了します。
コマンド環境 ( や cmd.exe
) での bash
コマンドライン全体の長さは、すべての引数と拡張変数を含めて、内在するオペレーティング システムが決めます。
sqlcmd と bcp での DSN のサポート
を指定した場合は、bcp -S
または sqlcmd :Connect
オプション (または -D
コマンド) でサーバー名ではなくデータ ソース名 (DSN) を指定できます。 -D
を指定すると、sqlcmd または bcp が、-S
オプションを使用して DSN で指定されたサーバーに接続されます。
システム DSN は、ODBC odbc.ini
ディレクトリ (標準インストールでは SysConfigDir
) 内の /etc/odbc.ini
ファイルに格納されます。 ユーザー DSN は、ユーザーのホーム ディレクトリ (.odbc.ini
) 内の ~/.odbc.ini
に格納されます。
Windows システムでは、システム DNS とユーザー DNS はレジストリに格納され、odbcad32.exe
を介して管理されます。 bcp と sqlcmd では、ファイル DSN はサポートされていません。
ドライバーによってサポートされるエントリの一覧については、「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
) は無視されます (指定されている場合)。
エイリアス isql
を定義して、 を呼び出す既存のスクリプトを、alias isql="sqlcmd -D"
を使用するように変更できます。
sqlcmd のベスト プラクティス
次の説明を参考にして、セキュリティと効率を最大にしてください。
統合セキュリティを使用します。
自動化された環境では
-X[1]
を使用します。適切なファイル システム権限を使用して、入力ファイルと出力ファイルのセキュリティを保護します。
パフォーマンスを向上させるには、複数のセッションではなく、1 つの sqlcmd セッションの中で、できるだけ作業するようにします。
バッチまたはクエリの実行に必要なタイムアウト値を、バッチまたはクエリの実行に予想よりも大きく設定します。
次の説明を参考にして、正確さを最大限に高めます:
-V 16
を使用して、重大度 16 レベルのメッセージをログします。 重大度 16 のメッセージは、ユーザーが訂正できる一般的なエラーを示します。プロセスが終了した後、終了コードと
DOS ERRORLEVEL
変数を確認します。 sqlcmd は普通に0
を返し、それ以外の場合はERRORLEVEL
で構成されたとおりに-V
が設定されます。 つまり、ERRORLEVEL
が SQL Server から報告されるエラー番号と同じ値であると想定しないでください。 エラー番号は、システム関数 @@ERRORに対応する SQL Server 固有の値です。ERRORLEVEL
は、sqlcmd が終了した理由を示す sqlcmd 固有の値であり、その値は-b
コマンド ライン引数を指定することによって影響を受けます。
終了コードおよび -V 16
のチェックと組み合わせて DOS ERRORLEVEL
を使用すると、自動化された環境 (特に運用リリース前の品質ゲート) でエラーをキャッチできます。
関連コンテンツ
- インストールされている sqlcmd ユーティリティのバージョンを確認する
- sqlcmd ユーティリティをダウンロードしてインストールする
- sqlcmd ユーティリティのコマンド
- スクリプト変数で sqlcmd を使用する
- クイック スタート: Docker を使用して SQL Server Linux コンテナー イメージを実行する
- sqlcmd ユーティリティの起動
- sqlcmd を使用してスクリプト ファイルから T-SQL を実行する
- sqlcmd を使用する
- sqlcmd を使用して SQL Server に接続する
- クエリ エディターによる SQLCMD スクリプトの編集
- CmdExec ジョブ ステップの作成