sqlcmd Utilitysqlcmd Utility

適用対象: ○SQL Server ○Azure SQL Database○Azure SQL Data Warehouse ○Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

SQL Server 2014 と下位の場合は、次を参照してください。 sqlcmd ユーティリティします。For SQL Server 2014 and lower, see sqlcmd Utility.

Linux では、sqlcmd を使用して、参照してくださいsqlcmd および bcp を Linux にインストールします。For using sqlcmd on Linux, see Install sqlcmd and bcp on Linux.

Sqlcmdユーティリティを使用して、TRANSACT-SQL ステートメント、システム プロシージャ、およびさまざまな使用可能なモードを使用してスクリプト ファイルを入力できます。The sqlcmd utility lets you enter Transact-SQL statements, system procedures, and script files through a variety of available modes:

  • コマンド プロンプト。At the command prompt.
  • クエリ エディター SQLCMD モード。In Query Editor in SQLCMD mode.
  • Windows スクリプト ファイル。In a Windows script file.
  • SQL Server エージェント ジョブのオペレーティング システム (Cmd.exe) ジョブ ステップ。In an operating system (Cmd.exe) job step of a SQL Server Agent job.

ユーティリティでは、ODBC を使用して、TRANSACT-SQL バッチを実行します。The utility uses ODBC to execute Transact-SQL batches.


sqlcmd ユーティリティの最近のバージョンは ダウンロード センターから Web リリースとして利用できます。The most recent versions of the sqlcmd utility is available as a web release from the Download Center. Always Encrypted をサポートするためには、13.1 以降のバージョンが必要です (-g) と Azure Active Directory 認証 (-G)。You need version 13.1 or higher to support Always Encrypted (-g) and Azure Active Directory authentication (-G). (お使いのコンピューターには複数のバージョンの sqlcmd.exe がインストールされている可能性があります。(You may have several versions of sqlcmd.exe installed on your computer. 必ず正しいバージョンを使用してください。Be sure you are using the correct version. バージョンを判断するには、 sqlcmd -?を実行します。)To determine the version, execute sqlcmd -?.)

既定でインストールされる事前に Azure Cloud Shell から sqlcmd ユーティリティを試すことができます: Cloud Shell の起動You can try the sqlcmd utility from Azure Cloud Shell as it is pre-installed by default: Launch Cloud Shell

SSMS で sqlcmd ステートメントを実行するには、上部のナビゲーションの [クエリ] メニューのドロップダウン リストから SQLCMD モードを選択します。To run sqlcmd statements in SSMS, select SQLCMD Mode from the top navigation Query Menu dropdown.


[SQL Server Management Studio]SQL Server Management Studio (SSMS) では、クエリ エディターの標準モードと SQLCMD モードでの実行に Microsoft .NET Framework.NET Framework SqlClient を使用します。 (SSMS) uses the Microsoft .NET Framework.NET Framework SqlClient for execution in regular and SQLCMD mode in Query Editor. コマンド ラインから sqlcmd を実行する場合、sqlcmd では ODBC ドライバーが使用されます。When sqlcmd is run from the command-line, sqlcmd uses the ODBC driver. 同じクエリでも、 [SQL Server Management Studio]SQL Server Management Studio の SQLCMD モードで実行する場合と sqlcmd ユーティリティで実行する場合とでは、適用される既定のオプションが異なるので、動作も異なる可能性があります。Because different default options may apply, you might see different behavior when you execute the same query in [SQL Server Management Studio]SQL Server Management Studio in SQLCMD Mode and in the sqlcmd utility.

現在、sqlcmd ではコマンドライン オプションと値の間に空白を入れる必要はありません。Currently, sqlcmd does not require a space between the command-line option and the value. ただし、将来のリリースでは、コマンドライン オプションと値の間に空白が必要になる可能性があります。However, in a future release, a space may be required between the command-line option and the value.

その他のトピック:Other topics:


   -a packet_size  
   -A (dedicated administrator connection)  
   -b (terminate batch job if there is an error)  
   -c batch_terminator  
   -C (trust the server certificate)  
   -d db_name  
   -e (echo input)  
   -E (use trusted connection)  
   -f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] 
   -g (enable column encryption) 
   -G (use Azure Active Directory for authentication)
   -h rows_per_header  
   -H workstation_name  
   -i input_file  
   -I (enable quoted identifiers)  
   -j (Print raw error messages)
   -k[1 | 2] (remove or replace control characters)  
   -K application_intent  
   -l login_timeout  
   -L[c] (list servers, optional clean output)  
   -m error_level  
   -M multisubnet_failover  
   -N (encrypt connection)  
   -o output_file  
   -p[1] (print statistics, optional colon format)  
   -P password  
   -q "cmdline query"  
   -Q "cmdline query" (and exit)  
   -r[0 | 1] (msgs to stderr)  
   -R (use client regional settings)  
   -s col_separator  
   -S [protocol:]server[instance_name][,port]  
   -t query_timeout  
   -u (unicode output file)  
   -U login_id  
   -v var = "value"  
   -V error_severity_level  
   -w column_width  
   -W (remove trailing spaces)  
   -x (disable variable substitution)  
   -X[1] (disable commands, startup script, environment variables, optional exit)  
   -y variable_length_type_display_width  
   -Y fixed_length_type_display_width  
   -z new_password   
   -Z new_password (and exit)  
   -? (usage)  

コマンド ライン オプションCommand-line Options

ログイン関連のオプションLogin-Related Options
専用管理者接続 (DAC) を使用して SQL Server にサインインします。Signs in to SQL Server with a Dedicated Administrator Connection (DAC). この種類の接続は、サーバーのトラブルシューティングで使用されます。This kind of connection is used to troubleshoot a server. この接続は、DAC をサポートしているサーバー コンピューターでのみ動作します。This connection works only with server computers that support DAC. DAC を使用できない場合は、sqlcmd はエラー メッセージを生成して終了します。If DAC is not available, sqlcmd generates an error message, and then exits. DAC の詳細については、「 データベース管理者用の診断接続」を参照してください。For more information about DAC, see Diagnostic Connection for Database Administrators. -G オプションには、オプションがサポートされていません。The -A option is not supported with the -G option. を使用して SQL Database に接続するときに、SQL server 管理者があります。When connecting to SQL Database using -A, you must be a SQL server administrator. DAC は、Azure Active Directory 管理者の使用可能ではありません。The DAC is not availble for an Azure Active Directory adminstrator.

クライアントでこのスイッチを使用して、サーバーの証明書を検証せずに暗黙的に信頼するようにクライアントを構成できます。This switch is used by the client to configure it to implicitly trust the server certificate without validation. このオプションは、ADO.NET オプションの TRUSTSERVERCERTIFICATE = trueと同等です。This option is equivalent to the ADO.NET option TRUSTSERVERCERTIFICATE = true.

-d db_name-d db_name
sqlcmd の開始時に USE db_name ステートメントを実行します。Issues a USE db_name statement when you start sqlcmd. このオプションにより、 sqlcmd スクリプト変数 SQLCMDDBNAME が設定されます。This option sets the sqlcmd scripting variable SQLCMDDBNAME. このパラメーターは、最初のデータベースを指定します。This parameter specifies the initial database. 既定値は、ログインの既定データベースのプロパティです。The default is your login's default-database property. データベースが存在しない場合は、エラー メッセージが生成され、 sqlcmd は終了します。If the database does not exist, an error message is generated and sqlcmd exits.

-l login_timeout-l login_timeout
サーバーに接続を試みたときに、 sqlcmd が ODBC ドライバーにログインするまでのタイムアウトを秒数で指定します。Specifies the number of seconds before a sqlcmd login to the ODBC driver times out when you try to connect to a server. このオプションにより、 sqlcmd スクリプト変数 SQLCMDLOGINTIMEOUT が設定されます。This option sets the sqlcmd scripting variable SQLCMDLOGINTIMEOUT. sqlcmd でのログインに関する既定のタイムアウトは 8 秒です。The default time-out for login to sqlcmd is eight seconds. -G オプションを使用して、SQL Database または SQL Data Warehouse に接続し、Azure Active Directory で認証する場合は、タイムアウト値を少なくとも 30 秒にすることをお勧めします。When using the -G option to connect to SQL Database or SQL Data Warehouse and authenticate using Azure Active Directory, a timeout value of at least 30 seconds is recommended. ログイン タイムアウトは、0 ~ 65,534 の数値にする必要があります。The login time-out must be a number between 0 and 65534. 指定した値が数値以外の場合、または範囲外の場合、 sqlcmd はエラー メッセージを生成します。If the value supplied is not numeric or does not fall into that range, sqlcmd generates an error message. この値に 0 を指定すると、タイムアウトは無制限になります。A value of 0 specifies time-out to be infinite.

ユーザー名とパスワードを使用せずにセキュリティ接続を使用して SQL Server にログオンします。Uses a trusted connection instead of using a user name and password to log on to SQL Server . 既定では、 -E を指定しないと、 sqlcmd ではセキュリティ接続オプションが使用されます。By default, without -E specified, sqlcmd uses the trusted connection option.

-E オプションを使用すると、SQLCMDPASSWORD などのユーザー名とパスワード用に使用できる環境変数の設定が無視されます。The -E option ignores possible user name and password environment variable settings such as SQLCMDPASSWORD. -E オプションが -U オプションまたは -P オプションと共に使用されると、エラー メッセージが生成されます。If the -E option is used together with the -U option or the -P option, an error message is generated.

列の暗号化設定を Enabledに設定します。Sets the Column Encryption Setting to Enabled. 詳細については、「 Always Encrypted」を参照してください。For more information, see Always Encrypted. Windows 証明書ストアに格納されているマスター キーのみがサポートされます。Only master keys stored in Windows Certificate Store are supported. -g スイッチには、 sqlcmd バージョン 13.1以上が必要です。The -g switch requires at least sqlcmd version 13.1. バージョンを判断するには、 sqlcmd -?を実行します。To determine your version, execute sqlcmd -?.

このスイッチは、SQL Database または SQL Data Warehouse に接続し、Azure Active Directory 認証を使用してユーザーを認証するように指定する場合に、クライアントによって使用されます。This switch is used by the client when connecting to SQL Database or SQL Data Warehouse to specify that the user be authenticated using Azure Active Directory authentication. このオプションにより、 sqlcmd スクリプト変数 SQLCMDUSEAAD = true が設定されます。This option sets the sqlcmd scripting variable SQLCMDUSEAAD = true. -G スイッチには、 sqlcmd バージョン 13.1以上が必要です。The -G switch requires at least sqlcmd version 13.1. バージョンを判断するには、 sqlcmd -?を実行します。To determine your version, execute sqlcmd -?. 詳細については、「 Azure Active Directory 認証を使用して SQL Database または SQL Data Warehouse に接続する」を参照してください。For more information, see Connecting to SQL Database or SQL Data Warehouse By Using Azure Active Directory Authentication. -G オプションには、オプションがサポートされていません。The -A option is not supported with the -G option.


-G オプションは、Azure SQL Database と Azure Data Warehouse にのみ適用されます。The -G option only applies to Azure SQL Database and Azure Data Warehouse.

  • Azure Active Directory のユーザー名とパスワード:Azure Active Directory Username and Password:

    Azure Active Directory のユーザー名とパスワードを使用には、 -G オプションを指定します。ユーザー名とパスワードは、 -U オプションと -P オプションを指定する方法でも使用できます。When you want to use an Azure Active Directory user name and password, you can provide the -G option and also use the user name and password by providing the -U and -P options.

    Sqlcmd -S testsrv.database.windows.net -d Target_DB_or_DW -U bob@contoso.com -P MyAADPassword -G 

    -G パラメーターには、バックエンドで次の接続文字列が生成されます。The -G parameter generates the following connection string in the backend:

     SERVER = Target_DB_or_DW.testsrv.database.windows.net;UID= bob@contoso.com;PWD=MyAADPassword;AUTHENTICATION = ActiveDirectoryPassword 
  • Azure Active Directory 統合Azure Active Directory Integrated

    Azure Active Directory 統合認証の場合、ユーザー名とパスワードなしで -G オプションを指定します。For Azure Active Directory Integrated authentication, provide the -G option without a user name or password:

    Sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G

    これにより、バックエンドで次の接続文字列が生成されます。This will generate the following connection string in the backend:

    SERVER = Target_DB_or_DW.testsrv.database.windows.net Authentication = ActiveDirectoryIntegrated; Trusted_Connection=NO


    -E オプション (Trusted_Connection) と -G オプションを一緒に使用することはできません。The -E option (Trusted_Connection) cannot be used along with the -G option).

-H workstation_name-H workstation_name
ワークステーション名です。A workstation name. このオプションにより、 sqlcmd スクリプト変数 SQLCMDWORKSTATION が設定されます。This option sets the sqlcmd scripting variable SQLCMDWORKSTATION. ワークステーション名は sys.sysprocesses カタログ ビューの hostname 列に一覧表示され、ストアド プロシージャ sp_whoを使用して取得できます。The workstation name is listed in the hostname column of the sys.sysprocesses catalog view and can be returned using the stored procedure sp_who. このオプションが指定されていない場合の既定値は、現在のコンピューター名になります。If this option is not specified, the default is the current computer name. この名前は、異なる sqlcmd セッションを識別する場合に使用できます。This name can be used to identify different sqlcmd sessions.

-j 画面に生のエラー メッセージを出力します。-j Prints raw error messages to the screen.

-K application_intent-K application_intent
アプリケーションがサーバーに接続するときのワークロードのタイプを宣言します。Declares the application workload type when connecting to a server. 現在サポートされている値は、 ReadOnlyだけです。The only currently supported value is ReadOnly. -K を指定しない場合、sqlcmd ユーティリティでは AlwaysOn 可用性グループのセカンダリ レプリカへの接続がサポートされません。If -K is not specified, the sqlcmd utility will not support connectivity to a secondary replica in an Always On availability group. 詳細については、「アクティブなセカンダリ: 読み取り可能なセカンダリ レプリカ (AlwaysOn 可用性グループ)」を参照してください。For more information, see Active Secondaries: Readable Secondary Replica (Always On Availability Groups)

-M multisubnet_failover-M multisubnet_failover
SQL Server 可用性グループまたは SQL Server フェールオーバー クラスター インスタンスの可用性グループ リスナーに接続する際には、必ず -M を指定してください。Always specify -M when connecting to the availability group listener of a SQL Server availability group or a SQL Server Failover Cluster Instance. -M を指定すると、(現在) アクティブなサーバーを迅速に検出して接続できます。-M provides for faster detection of and connection to the (currently) active server. -M を指定しない場合、 -M は無効になります。If –M is not specified, -M is off. 詳細については [!含めるssHADRの作成と構成の可用性グループ(SQL Server)フェールオーバー クラスタ リングと Always On 可用性グループ (SQL Server)、およびアクティブなセカンダリ: 読み取り可能なのセカンダリ レプリカ (Always On 可用性グループ)します。For more information about [!INCLUDEssHADR, Creation and Configuration of Availability Groups (SQL Server), Failover Clustering and Always On Availability Groups (SQL Server), and Active Secondaries: Readable Secondary Replicas(Always On Availability Groups).

クライアントでこのスイッチを使用して、暗号化された接続を要求できます。This switch is used by the client to request an encrypted connection.

-P password-P password
ユーザーが指定するパスワードです。Is a user-specified password. パスワードでは大文字と小文字が区別されます。Passwords are case-sensitive. -U オプションを使用して -P オプションを使用せず、SQLCMDPASSWORD 環境変数が設定されていない場合は、 sqlcmd はユーザーにパスワードを要求します。If the -U option is used and the -P option is not used, and the SQLCMDPASSWORD environment variable has not been set, sqlcmd prompts the user for a password. Null のパスワードの使用はお勧めしませんが、パラメーター値の連続した二重引用符のペアを使用して null パスワードを指定することができます。We do not recommend the use of the null password, but you can specify the null password by using a pair of contiguous double-quotation marks for the parameter value:

  • -P ""-P ""

強力なパスワードを使用することをお勧めします。We recommend that you use a strong password.

強力なパスワードを使用してください。Use a strong password!

パスワード プロンプトは、次のようにパスワード プロンプトをコンソールに出力することによって表示されます。 Password:The password prompt is displayed by printing the password prompt to the console, as follows: Password:

ユーザーが行った入力は表示されません。User input is hidden. つまり、入力時には何も表示されず、カーソルが移動しません。This means that nothing is displayed and the cursor stays in position.

SQLCMDPASSWORD 環境変数を使用して、現在のセッションに既定のパスワードを設定できます。The SQLCMDPASSWORD environment variable lets you set a default password for the current session. したがって、パスワードをバッチ ファイルにハード コードする必要はありません。Therefore, passwords do not have to be hard-coded into batch files.

次の例では、まずコマンド プロンプトで SQLCMDPASSWORD 変数を設定してから sqlcmd ユーティリティにアクセスします。The following example first sets the SQLCMDPASSWORD variable at the command prompt and then accesses the sqlcmd utility. コマンド プロンプトで、次のように入力します。At the command prompt, type:

次のコマンド プロンプトが表示されたら、次のように入力します:At the following command prompt, type:


ユーザー名とパスワードの組み合わせが正しくない場合は、エラー メッセージが生成されます。If the user name and password combination is incorrect, an error message is generated.

注:NOTE! OSQLPASSWORD 環境変数は旧バージョンとの互換性が維持されました。The OSQLPASSWORD environment variable was kept for backward compatibility. SQLCMDPASSWORD 環境変数は OSQLPASSWORD 環境変数よりも優先されます。The SQLCMDPASSWORD environment variable takes precedence over the OSQLPASSWORD environment variable. OSQLPASSWORD が共有されなくなったユーティリティsqlcmdosql干渉せずに相互の横にある使用できます。Now that OSQLPASSWORD is no longer shared, the utilities sqlcmd and osql can be used next to each other without interference. 従来のスクリプトは引き続き機能します。Old scripts will continue to work.

-P オプションが -E オプションと共に使用されると、エラー メッセージが生成されます。If the -P option is used with the -E option, an error message is generated.

-P オプションの後に複数の引数があると、エラー メッセージが生成され、プログラムが終了します。If the -P option is followed by more than one argument, an error message is generated and the program exits.

-S [プロトコル:]server[\instance_name] [、* *ポート]-S** [protocol:]server[\instance_name][,port]
接続先となる SQL Server のインスタンスを指定します。Specifies the instance of SQL Server to which to connect. このオプションにより、 sqlcmd スクリプト変数 SQLCMDSERVER が設定されます。It sets the sqlcmd scripting variable SQLCMDSERVER.

そのサーバー コンピューター上の SQL Server の既定のインスタンスに接続するには、server_name を指定します。Specify server_name to connect to the default instance of SQL Server on that server computer. そのサーバー コンピューター上の SQL Server の名前付きインスタンスに接続するには、server_name [ \instance_name ] を指定します。Specify server_name [ \instance_name ] to connect to a named instance of SQL Server on that server computer. サーバー コンピューターを指定しない場合、sqlcmd は、ローカル コンピューター上にある SQL Server の既定のインスタンスに接続します。If no server computer is specified, sqlcmd connects to the default instance of SQL Server on the local computer. ネットワーク上のリモート コンピューターから sqlcmd を実行するときは、このオプションが必要です。This option is required when you execute sqlcmd from a remote computer on the network.

protocol には、 tcp (TCP/IP)、 lpc (共有メモリ)、または np (名前付きパイプ) を指定できます。protocol can be tcp (TCP/IP), lpc (shared memory), or np (named pipes).

sqlcmd を実行するときに server_name [ \instance_name ] を指定しなかった場合は、SQL Server により SQLCMDSERVER 環境変数がチェックされ、その値が使用されます。If you do not specify a server_name [ \instance_name ] when you start sqlcmd, SQL Server checks for and uses the SQLCMDSERVER environment variable.


OSQLSERVER 環境変数は旧バージョンとの互換性を維持しています。The OSQLSERVER environment variable has been kept for backward compatibility. SQLCMDSERVER 環境変数は OSQLSERVER 環境変数よりも優先されます。これにより、 sqlcmdosql を競合することなく組み合わせて使用でき、従来のスクリプトは引き続き機能を実行することができます。The SQLCMDSERVER environment variable takes precedence over the OSQLSERVER environment variable; this means that sqlcmd and osql can be used next to each other without interference and that old scripts will continue to work.

ーU login_id-U login_id
ログイン名または包含データベースのユーザー名です。Is the login name or contained database user name. 包含データベースのユーザーの場合、データベース名のオプション (-d) を指定する必要があります。For contained database users, you must provide the database name option (-d).


OSQLUSER 環境変数は旧バージョンとの互換性を維持しています。The OSQLUSER environment variable is available for backward compatibility. SQLCMDUSER 環境変数は OSQLUSER 環境変数よりも優先されます。The SQLCMDUSER environment variable takes precedence over the OSQLUSER environment variable. これにより、 sqlcmdosql を競合することなく組み合わせて使用できます。This means that sqlcmd and osql can be used next to each other without interference. また、既存の osql スクリプトは引き続き実行することができます。It also means that existing osql scripts will continue to work.

-U オプションも -P オプションも指定しないと、sqlcmd は Microsoft Windows 認証モードを使用して接続を試みます。If neither the -U option nor the -P option is specified, sqlcmd tries to connect by using Microsoft Windows Authentication mode. 認証は sqlcmdを実行しているユーザーの Windows アカウントに基づきます。Authentication is based on the Windows account of the user who is running sqlcmd.

-U オプションが -E オプション (このトピックの後半で説明) と同時に使用されると、エラー メッセージが生成されます。If the -U option is used with the -E option (described later in this topic), an error message is generated. -U オプションの後に複数の引数があると、エラー メッセージが生成され、プログラムが終了します。If the –U option is followed by more than one argument, an error message is generated and the program exits.

-z new_password-z new_password
パスワードの変更:Change password:

sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd

-Z new_password-Z new_password
パスワードの変更と終了:Change password and exit:

sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd

入力または出力のオプションInput/Output Options
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:* codepage]-f* codepage | i:codepage[,o:codepage] | o:codepage[,i:* codepage*]
入力と出力のコード ページを指定します。Specifies the input and output code pages. コード ページ番号は、インストールされた Windows コード ページを指定する数値です。The codepage number is a numeric value that specifies an installed Windows code page.

コード ページには次の変換規則があります。Code-page conversion rules:

  • コード ページを指定しないと、入力ファイルが変換不要の Unicode ファイルでない限り、 sqlcmd では、入力ファイルと出力ファイルの両方に現在のコード ページが使用されます。If no code pages are specified, sqlcmd will use the current code page for both input and output files, unless the input file is a Unicode file, in which case no conversion is required.

  • sqlcmd では、ビッグ エンディアンとリトル エンディアンの両方の Unicode 入力ファイルが自動的に認識されます。sqlcmd automatically recognizes both big-endian and little-endian Unicode input files. -u オプションを指定すると、出力は常にリトル エンディアン Unicode になります。If the -u option has been specified, the output will always be little-endian Unicode.

  • 出力ファイルを指定しないと、出力コード ページはコンソールのコード ページになります。If no output file is specified, the output code page will be the console code page. この方法では、コンソールに出力が正しく表示されます。This approach enables the output to be displayed correctly on the console.

  • 複数の入力ファイルの場合、同じコード ページが指定されているものと見なされます。Multiple input files are assumed to be of the same code page. Unicode 入力ファイルと Unicode 以外の入力ファイルを混在させることができます。Unicode and non-Unicode input files can be mixed.

    Cmd.exe のコード ページを確認するには、コマンド プロンプトに「 chcp 」と入力します。Enter chcp at the command prompt to verify the code page of Cmd.exe.

    -i input_file[、* * * input_file2*...]-i** input_file[,input_file2...]
    SQL ステートメントまたはストアド プロシージャのバッチを含むファイルを指定します。Identifies the file that contains a batch of SQL statements or stored procedures. 複数のファイルを指定すると、それらのファイルは順番に読み取られて処理されます。Multiple files may be specified that will be read and processed in order. ファイル名とファイル名の間には空白を使用しないでください。Do not use any spaces between file names. sqlcmd により、最初に、指定したすべてのファイルが存在しているかどうかがチェックされます。sqlcmd will first check to see whether all the specified files exist. 1 つ以上のファイルが存在していない場合は、 sqlcmd は終了します。If one or more files do not exist, sqlcmd will exit. -i と -Q/-q オプションは同時に使用できません。The -i and the -Q/-q options are mutually exclusive.

    パスの例:Path examples:

-i C:\<filename>  
-i \\<Server>\<Share$>\<filename>  
-i "C:\Some Folder\<file name>"  

空白を含むファイル パスは、引用符で囲む必要があります。File paths that contain spaces must be enclosed in quotation marks.

このオプションは -iinput_file -II input_file のように複数回使用できます。This option may be used more than once: -iinput_file -II input_file.

-o output_file-o output_file
sqlcmdからの出力を受信するファイルを指定します。Identifies the file that receives output from sqlcmd.

-u が指定されている場合は、 output_file は Unicode 形式で格納されます。If -u is specified, the output_file is stored in Unicode format. ファイル名が無効な場合は、エラー メッセージが生成され、 sqlcmd が終了します。If the file name is not valid, an error message is generated, and sqlcmd exits. sqlcmd は、同じファイルに対する複数の sqlcmd プロセスの同時書き込みはサポートしていません。sqlcmd does not support concurrent writing of multiple sqlcmd processes to the same file. 出力ファイルが破損するか、または不適切なファイルになる可能性があります。The file output will be corrupted or incorrect. 参照してください、 -fスイッチがファイル形式に関連することもできます。See the -f switch is also relevant to file formats. このファイルが存在しない場合は作成されます。This file will be created if it does not exist. 以前の sqlcmd セッションで同じ名前のファイルが作成されていた場合は、上書きされます。A file of the same name from a prior sqlcmd session will be overwritten. ここで指定されるファイルは stdout ファイルではありません。The file specified here is not the stdout file. stdout ファイルが指定されると、このファイルは使用されません。If a stdout file is specified, this file will not be used.

パスの例:Path examples:

-o C:< filename>  
-o \\<Server>\<Share$>\<filename>  
-o "C:\Some Folder\<file name>"  

空白を含むファイル パスは、引用符で囲む必要があります。File paths that contain spaces must be enclosed in quotation marks.

-r[0 | 1]-r[0 | 1]
エラー メッセージ出力を画面にリダイレクトします (stderr)。Redirects the error message output to the screen (stderr). パラメーターを指定しない場合や、 0を指定した場合は、重大度レベル 11 以上のエラー メッセージだけがリダイレクトされます。If you do not specify a parameter or if you specify 0, only error messages that have a severity level of 11 or higher are redirected. 1を指定した場合は、PRINT を含むすべてのエラー メッセージ出力がリダイレクトされます。If you specify 1, all error message output including PRINT is redirected. -o を使用しても効果はありません。Has no effect if you use -o. 既定では、メッセージは stdoutに送られます。By default, messages are sent to stdout.

sqlcmd により、クライアントのロケールに基づいて SQL Server から取得された数値、通貨、日付、および時刻の各列がローカライズされます。Causes sqlcmd to localize numeric, currency, date, and time columns retrieved from SQL Server based on the client’s locale. 既定では、これらの列はサーバーの地域別設定を使用して表示されます。By default, these columns are displayed using the server’s regional settings.

input_file の形式に関係なく、 output_fileを Unicode 形式で格納するように指定します。Specifies that output_file is stored in Unicode format, regardless of the format of input_file.

クエリ実行オプションQuery Execution Options
入力スクリプトを標準出力デバイス (stdout) に書き込みます。Writes input scripts to the standard output device (stdout).

SET QUOTED_IDENTIFIER 接続オプションを ON に設定します。Sets the SET QUOTED_IDENTIFIER connection option to ON. 既定では、OFF に設定されています。By default, it is set to OFF. 詳細については、「SET QUOTED_IDENTIFIER (Transact-SQL)」を参照してください。For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

-q" cmdline query "-q" cmdline query "
sqlcmd の起動時にクエリを実行しますが、クエリの実行が完了しても sqlcmd は終了しません。Executes a query when sqlcmd starts, but does not exit sqlcmd when the query has finished running. セミコロンで区切られた複数のクエリを実行できます。Multiple-semicolon-delimited queries can be executed. 次の例で示すように、クエリを引用符で囲みます。Use quotation marks around the query, as shown in the following example.

コマンド プロンプトで、次のように入力します。At the command prompt, type:

sqlcmd -d AdventureWorks2012 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2012 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"


クエリでは GO ターミネータを使用しないでください。Do not use the GO terminator in the query.

このオプションと共に -b を指定すると、 sqlcmd はエラーで終了します。If -b is specified together with this option, sqlcmd exits on error. -b オプションについては、このトピックの後半で説明します。-b is described later in this topic.

-Q" cmdline query "-Q" cmdline query "
sqlcmd の起動時にクエリを実行し、 sqlcmdを即時終了します。Executes a query when sqlcmd starts and then immediately exits sqlcmd. セミコロンで区切られた複数のクエリを実行できます。Multiple-semicolon-delimited queries can be executed.

次の例で示すように、クエリを引用符で囲みます。Use quotation marks around the query, as shown in the following example.

コマンド プロンプトで、次のように入力します。At the command prompt, type:

sqlcmd -d AdventureWorks2012 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2012 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"


クエリでは GO ターミネータを使用しないでください。Do not use the GO terminator in the query.

このオプションと共に -b を指定すると、 sqlcmd はエラーで終了します。If -b is specified together with this option, sqlcmd exits on error. -b オプションについては、このトピックの後半で説明します。-b is described later in this topic.

-t query_timeout-t query_timeout
コマンド (または SQL ステートメント) の実行待ち時間を秒単位で指定します。このオプションにより、 sqlcmd スクリプト変数 SQLCMDSTATTIMEOUT が設定されます。Specifies the number of seconds before a command (or SQL statement) times out. This option sets the sqlcmd scripting variable SQLCMDSTATTIMEOUT. time_out 値を指定しないと、コマンドはタイムアウトしません。querytime_out は、1 から 65,534 の数値にする必要があります。If a time_out value is not specified, the command does not time out. The querytime_out must be a number between 1 and 65534. 指定した値が数値以外の場合、または範囲外の場合、 sqlcmd はエラー メッセージを生成します。If the value supplied is not numeric or does not fall into that range, sqlcmd generates an error message.


実際のタイムアウト値は、指定した time_out 値より数秒異なる場合があります。The actual time out value may vary from the specified time_out value by several seconds.

-vvar = value[ var = value...]-vvar = value[ var = value...]
sqlcmdスクリプトで使用できる sqlcmd スクリプト変数を作成します。Creates a sqlcmdscripting variable that can be used in a sqlcmd script. 値に空白が含まれる場合は、値を引用符で囲みます。Enclose the value in quotation marks if the value contains spaces. 複数の var="values" の値を指定できます。You can specify multiple var="values" values. 指定した値にエラーが生じた場合は、 sqlcmd は、エラー メッセージを生成してから終了します。If there are errors in any of the values specified, sqlcmd generates an error message and then exits.

sqlcmd -v MyVar1=something MyVar2="some thing"

sqlcmd -v MyVar1=something -v MyVar2="some thing"

sqlcmd ではスクリプト変数が無視されます。Causes sqlcmd to ignore scripting variables. このパラメーターは、標準変数と同じ形式の文字列 ($(variable_name) など) を含む INSERT ステートメントが、スクリプトに多数含まれている場合に便利です。This parameter is useful when a script contains many INSERT statements that may contain strings that have the same format as regular variables, such as $(variable_name).

書式設定のオプションFormatting Options
-h headers-h headers
列ヘッダーの間に出力する行数を指定します。Specifies the number of rows to print between the column headings. 既定では、各クエリの結果に対して、ヘッダーは 1 つだけ表示されます。The default is to print headings one time for each set of query results. このオプションにより、 sqlcmd スクリプト変数 SQLCMDHEADERS が設定されます。This option sets the sqlcmd scripting variable SQLCMDHEADERS. ヘッダーを出力しない場合は、 -1 を指定します。Use -1 to specify that headers must not be printed. 有効でない値があると、 sqlcmd はエラー メッセージを生成してから終了します。Any value that is not valid causes sqlcmd to generate an error message and then exit.

-k [1 | 2]-k [1 | 2]
タブ、改行文字などのすべての制御文字を出力から削除します。Removes all control characters, such as tabs and new line characters from the output. このパラメーターにより、データが返されたときの列の形式が維持されます。This parameter preserves column formatting when data is returned. 1 を指定した場合、制御文字は 1 つの空白に置き換えられます。If 1 is specified, the control characters are replaced by a single space. 2 を指定すると、連続する制御文字が 1 つの空白に置き換えられます。If 2 is specified, consecutive control characters are replaced by a single space. -k-k1と同じです。-k is the same as -k1.

-s col_separator-s col_separator
列の区切り文字を指定します。Specifies the column-separator character. 既定では、空白になっています。The default is a blank space. このオプションにより、 sqlcmd スクリプト変数 SQLCMDCOLSEP が設定されます。This option sets the sqlcmd scripting variable SQLCMDCOLSEP. アンパサンド (&)、セミコロン (;) など、オペレーティング システムで特別な意味を持つ文字を使用する場合は、その文字を引用符 (") で囲みます。To use characters that have special meaning to the operating system such as the ampersand (&), or semicolon (;), enclose the character in quotation marks ("). 列の区切り文字には、任意の 8 ビットの文字を指定できます。The column separator can be any 8-bit character.

-w column_width-w column_width
出力用の画面幅を指定します。Specifies the screen width for output. このオプションにより、 sqlcmd スクリプト変数 SQLCMDCOLWIDTH が設定されます。This option sets the sqlcmd scripting variable SQLCMDCOLWIDTH. 列幅は 8 よりも大きくかつ 65,536 よりも小さい値にする必要があります。The column width must be a number greater than 8 and less than 65536. 指定した列幅が範囲外の場合、 sqlcmd はエラー メッセージを生成します。If the specified column width does not fall into that range, sqlcmd generates an error message. 既定の幅は 80 文字です。The default width is 80 characters. 指定した列幅を超えると、出力行は次の列に折り返されます。When an output line exceeds the specified column width, it wraps on to the next line.

このオプションは、列から後続の空白を削除します。This option removes trailing spaces from a column. 他のアプリケーションにエクスポートするデータを準備するときは、 -s オプションと同時にこのオプションを使用します。Use this option together with the -s option when preparing data that is to be exported to another application. -y または -Y オプションと共には使用できません。Cannot be used with the -y or -Y options.

-y variable_length_type_display_width-y variable_length_type_display_width
sqlcmd スクリプト変数 SQLCMDMAXVARTYPEWIDTHを設定します。Sets the sqlcmd scripting variable SQLCMDMAXVARTYPEWIDTH. 既定値は 256 です。The default is 256. 長い可変長のデータ型に返される文字数を制限します。It limits the number of characters that are returned for the large variable length data types:

  • varchar(max)varchar(max)

  • nvarchar(max)nvarchar(max)

  • varbinary(max)varbinary(max)

  • xmlxml

  • UDT (ユーザー定義のデータ型)UDT (user-defined data types)

  • texttext

  • ntextntext

  • imageimage


UDT は実装によって固定長にもなります。UDTs can be of fixed length depending on the implementation. 固定長の UDT の長さが display_widthよりも短い場合は、返される UDT の値は影響を受けません。If this length of a fixed length UDT is shorter that display_width, the value of the UDT returned is not affected. ただし、 display_widthよりも長い場合は、出力は切り捨てられます。However, if the length is longer than display_width, the output is truncated.


返されるデータのサイズによって、サーバーとネットワークの両方に重大なパフォーマンスの問題が発生する可能性があるため、 -y 0 オプションは十分注意して使用してください。Use the -y 0 option with extreme caution because it may cause serious performance issues on both the server and the network, depending on the size of data returned.

-Y fixed_length_type_display_width-Y fixed_length_type_display_width
sqlcmd スクリプト変数 SQLCMDMAXFIXEDTYPEWIDTHを設定します。Sets the sqlcmd scripting variable SQLCMDMAXFIXEDTYPEWIDTH. 既定値は 0 (無制限) です。The default is 0 (unlimited). 次のデータ型に返される文字数を制限します。Limits the number of characters that are returned for the following data types:

  • char( n )、ここで 1<=n<=8000char( n ), where 1<=n<=8000

  • nchar(n n )、ここで 1<=n<=4000nchar(n n ), where 1<=n<=4000

  • varchar(n n )、ただし 1<=n<=8000varchar(n n ), where 1<=n<=8000

  • nvarchar(n n )、ただし 1<=n<=4000nvarchar(n n ), where 1<=n<=4000

  • varbinary(n n )、ただし 1<=n<=4000varbinary(n n ), where 1<=n<=4000

  • variantvariant

    エラー報告のオプションError Reporting Options
    エラーが発生したときに、 sqlcmd を終了し、DOS ERRORLEVEL 値を返します。Specifies that sqlcmd exits and returns a DOS ERRORLEVEL value when an error occurs. SQL Server のエラー メッセージの重大度が 10 よりも高い場合、DOS ERRORLEVEL 変数に返される値は 1 です。それ以外の場合は、0 が返されます。The value that is returned to the DOS ERRORLEVEL variable is 1 when the SQL Server error message has a severity level greater than 10; otherwise, the value returned is 0. -V オプションが -bと共に設定されている場合、 -V . を使用して設定した値よりも重大度が低いときは、 sqlcmdはエラーを報告しません。If the -V option has been set in addition to -b, sqlcmd will not report an error if the severity level is lower than the values set using -V. コマンド プロンプト バッチ ファイルにより ERRORLEVEL の値をテストすることができ、エラーを適切に処理できます。Command prompt batch files can test the value of ERRORLEVEL and handle the error appropriately. sqlcmd は重大度レベル 10 (情報メッセージ) に対してはエラーを報告しません。sqlcmd does not report errors for severity level 10 (informational messages).

    sqlcmd スクリプトに正しくないコメントや構文エラーが含まれている場合やスクリプト変数が不足している場合、返される ERRORLEVEL は 1 です。If the sqlcmd script contains an incorrect comment, syntax error, or is missing a scripting variable, ERRORLEVEL returned is 1.

    -m error_level-m error_level
    stdoutに送信されるエラー メッセージを制御します。Controls which error messages are sent to stdout. 重大度レベルがこのレベル以上のメッセージが送信されます。Messages that have a severity level greater than or equal to this level are sent. この値を -1に設定すると、情報メッセージを含めすべてのメッセージが送信されます。When this value is set to -1, all messages including informational messages, are sent. -m-1の間にスペースは使用できません。Spaces are not allowed between the -m and -1. たとえば、 -m-1 は有効で、 -m-1 は有効でありません。For example, -m-1 is valid, and -m -1 is not.

    このオプションにより、 sqlcmd スクリプト変数 SQLCMDERRORLEVEL も設定されます。This option also sets the sqlcmd scripting variable SQLCMDERRORLEVEL. この変数の既定値は 0 です。This variable has a default of 0.

    -V error_severity_level-V error_severity_level
    ERRORLEVEL 変数を設定するために使用される重大度レベルを制御します。Controls the severity level that is used to set the ERRORLEVEL variable. 重大度レベルがこの値以上のエラー メッセージによって、ERRORLEVEL が設定されます。Error messages that have severity levels greater than or equal to this value set ERRORLEVEL. 0 より小さい値は 0 と報告されます。Values that are less than 0 are reported as 0. バッチ ファイルおよび CMD ファイルを使用して、ERRORLEVEL 変数の値をテストできます。Batch and CMD files can be used to test the value of the ERRORLEVEL variable.

    その他のオプションMiscellaneous Options
    -a packet_size-a packet_size
    異なるサイズのパケットを要求します。Requests a packet of a different size. このオプションにより、 sqlcmd スクリプト変数 SQLCMDPACKETSIZE が設定されます。This option sets the sqlcmd scripting variable SQLCMDPACKETSIZE. packet_size には、512 ~ 32767 の値を指定する必要があります。packet_size must be a value between 512 and 32767. 既定値は 4096 です。The default = 4096. 大きなパケット サイズを指定すると、GO コマンド間に多数の SQL ステートメントが含まれているスクリプトの実行パフォーマンスが向上します。A larger packet size can enhance performance for execution of scripts that have lots of SQL statements between GO commands. 既定値よりも大きいパケット サイズを要求できます。You can request a larger packet size. ただし、要求が拒否された場合、 sqlcmd はサーバーの既定のパケット サイズを使用します。However, if the request is denied, sqlcmd uses the server default for packet size.

    -c batch_terminator-c batch_terminator
    バッチ ターミネータを指定します。Specifies the batch terminator. 既定では、"GO" だけが入力されている行があると、コマンドが終了したと見なされ、SQL Server に送られます。By default, commands are terminated and sent to SQL Server by typing the word "GO" on a line by itself. バッチ ターミネータをリセットする場合、Transact-SQL の予約キーワードやオペレーティング システムで特別な意味を持つ文字は、先頭に円記号が付いているかどうかに関係なく、使用しないでください。When you reset the batch terminator, do not use Transact-SQL reserved keywords or characters that have special meaning to the operating system, even if they are preceded by a backslash.

    ローカルに構成されたサーバー コンピューターと、ネットワーク上でブロードキャストしているサーバー コンピューター名の一覧を表示します。Lists the locally configured server computers, and the names of the server computers that are broadcasting on the network. このパラメーターは、他のパラメーターと組み合わせて使用することはできません。This parameter cannot be used in combination with other parameters. 一覧表示できるサーバー コンピューターの最大数は 3,000 です。The maximum number of server computers that can be listed is 3000. バッファーのサイズが原因でサーバーの一覧が切り捨てられる場合は、警告メッセージが表示されます。If the server list is truncated because of the size of the buffer a warning message is displayed.


ネットワーク上のブロードキャストの特性によっては、 sqlcmd は、一部のサーバーからタイムリーな応答を受信できない場合があります。Because of the nature of broadcasting on networks, sqlcmd may not receive a timely response from all servers. そのため、返されるサーバーのリストは、このオプションの実行ごとに異なる可能性があります。Therefore, the list of servers returned may vary for each invocation of this option.

省略可能なパラメーター c を指定すると、出力結果には Servers: ヘッダー行が含まれません。このため、各サーバー行は、先頭に空白がない状態で一覧表示されます。If the optional parameter c is specified, the output appears without the Servers: header line, and each server line is listed without leading spaces. このプレゼンテーションは、クリーン アウトプットと呼ばれます。This presentation is referred to as clean output. クリーン アウトプットを使用すると、スクリプト言語の処理パフォーマンスが向上します。Clean output improves the processing performance of scripting languages.

すべての結果セットのパフォーマンス統計を出力します。Prints performance statistics for every result set. パフォーマンス統計の形式の例を次に示します。The following display is an example of the format for performance statistics:

Network packet size (bytes): n

x xact[s]:

Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)


x = SQL Server によって処理されるトランザクション数。x = Number of transactions that are processed by SQL Server .

t1 = すべてのトランザクションにかかる合計時間、t1 = Total time for all transactions.

t2 = 単一のトランザクションにかかる平均時間。t2 = Average time for a single transaction.

t3 = 1 秒あたりの平均トランザクション数。t3 = Average number of transactions per second.

すべての時間はミリ秒単位です。All times are in milliseconds.

省略可能なパラメーター 1 を指定した場合は、統計の出力形式は、スプレッドシートへ容易にインポートできる、またはスクリプトによって処理できる、コロンで区切られた形式となります。If the optional parameter 1 is specified, the output format of the statistics is in colon-separated format that can be imported easily into a spreadsheet or processed by a script.

省略可能なパラメーターが 1以外の値の場合は、エラーが生成され、 sqlcmd は終了します。If the optional parameter is any value other than 1, an error is generated and sqlcmd exits.

sqlcmd がバッチ ファイルから実行される場合に、システムのセキュリティを損なう可能性のあるコマンドを無効にします。Disables commands that might compromise system security when sqlcmd is executed from a batch file. 無効なコマンドも認識されます。 sqlcmd は警告メッセージを表示して継続します。The disabled commands are still recognized; sqlcmd issues a warning message and continues. 省略可能なパラメーターを 1 に指定すると、 sqlcmd はエラー メッセージを生成して終了します。If the optional parameter 1 is specified, sqlcmd generates an error message and then exits. -X オプションを使用した場合に無効になるコマンドは次のとおりです。The following commands are disabled when the -X option is used:

  • EDED

  • !!!! commandcommand

    -X オプションを指定すると、環境変数が sqlcmdに渡されなくなります。If the -X option is specified, it prevents environment variables from being passed on to sqlcmd. また、SQLCMDINI スクリプト変数を使用して指定した、スタートアップ スクリプトも実行できなくなります。It also prevents the startup script specified by using the SQLCMDINI scripting variable from being executed. sqlcmd スクリプト変数の詳細については、「 sqlcmd でのスクリプト変数の使用」を参照してください。For more information about sqlcmd scripting variables, see Use sqlcmd with Scripting Variables.

    sqlcmd のバージョンと sqlcmd オプションの構文の概要を表示します。Displays the version of sqlcmd and a syntax summary of sqlcmd options.


オプションは、構文の例に示されている順序に従って使用する必要はありません。Options do not have to be used in the order shown in the syntax section.

複数の結果が返される場合は、 sqlcmd は同じバッチの各結果セットの間に空白行を 1 行ずつ出力します。When multiple results are returned, sqlcmd prints a blank line between each result set in a batch. また、 <x> rows affected というメッセージは、そのメッセージが実行したステートメントに該当する場合にだけ表示されます。In addition, the <x> rows affected message does not appear when it does not apply to the statement executed.

sqlcmd を対話的に使用するには、コマンド プロンプトで、 sqlcmd を前に説明した各オプションと共に入力します。To use sqlcmd interactively, type sqlcmd at the command prompt with any one or more of the options described earlier in this topic. 詳細については、「 sqlcmd ユーティリティの使用」を参照してください。For more information, see Use the sqlcmd Utility


-L-Q-Z 、または -i のオプションを使用すると、 sqlcmd は実行後に終了します。The options -L, -Q, -Z or -i cause sqlcmd to exit after execution.

コマンド環境 (Cmd.exe) での sqlcmd コマンドライン全体の長さは、すべての引数と拡張変数を含めて、オペレーティング システムが Cmd.exe のために決めます。The total length of the sqlcmd command-line in the command environment (Cmd.exe), including all arguments and expanded variables, is that which is determined by the operating system for Cmd.exe.

変数の優先順位 (低から高)Variable Precedence (Low to High)

  1. システム レベル環境変数System-level environmental variables.

  2. ユーザー レベル環境変数User-level environmental variables

  3. sqlcmd の実行前にコマンド プロンプトで行ったコマンド シェル ( SETX=Y) の設定Command shell (SET X=Y) set at command prompt before running sqlcmd.

  4. sqlcmd-v X=Ysqlcmd-v X=Y

  5. :Setvar X Y:Setvar X Y


環境変数を表示するには、 [コントロール パネル][システム] アイコンを開き、 [詳細設定] タブをクリックします。To view the environmental variables, in Control Panel, open System, and then click the Advanced tab.

sqlcmd スクリプト変数sqlcmd Scripting Variables

変数Variable 関連スイッチRelated switch R/WR/W 既定Default
SQLCMDSERVERSQLCMDSERVER -S-S RR "DefaultLocalInstance""DefaultLocalInstance"
SQLCMDSTATTIMEOUTSQLCMDSTATTIMEOUT -t-t R/WR/W "0" = 無制限に待機"0" = wait indefinitely


R は、その値がプログラムの初期化時に一度だけ設定できることを示します。R indicates the value can only be set one time during program initialization.

R/W は、 setvar コマンドを使用して値を変更できること、および後続のコマンドに新しい値が反映されることを示します。R/W indicates that the value can be modified by using the setvar command and subsequent commands will be influenced by the new value.

sqlcmd コマンドsqlcmd Commands

sqlcmd では、Transact-SQL ステートメントの他に次のコマンドも使用できます。In addition to Transact-SQL statements within sqlcmd, the following commands are also available:

GO [count]GO [count] :List:List
[:] RESET[:] RESET :Error:Error
[:] ED[:] ED :Out:Out
[:] !![:] !! :Perftrace:Perftrace
[:] QUIT[:] QUIT :Connect:Connect
[:] EXIT[:] EXIT :On Error:On Error
:r:r :Help:Help
:ServerList:ServerList :XML [ON | OFF]:XML [ON | OFF]
:Setvar:Setvar :Listvar:Listvar

sqlcmd コマンドを使用するときは、次の点に注意してください。Be aware of the following when you use sqlcmd commands:

  • GO を除くすべての sqlcmd コマンドは、コロン (:) によってプレフィックス指定する必要があります。All sqlcmd commands, except GO, must be prefixed by a colon (:).


    既存の osql スクリプトとの互換性を保つために、一部のコマンドはコロンなしで認識されます。To maintain backward compatibility with existing osql scripts, some of the commands will be recognized without the colon. これは、[:] によって示されています。This is indicated by the [:].

  • sqlcmd コマンドが認識されるのは、コマンドが行の先頭にある場合のみです。sqlcmd commands are recognized only if they appear at the start of a line.

  • すべての sqlcmd コマンドには、大文字と小文字の区別はありません。All sqlcmd commands are case insensitive.

  • 各コマンドは個別の行に指定する必要があります。Each command must be on a separate line. コマンドの後には、Transact-SQL ステートメントや別のコマンドを指定できません。A command cannot be followed by a Transact-SQL statement or another command.

  • コマンドは即座に実行されます。Commands are executed immediately. Transact-SQL ステートメントのように、実行バッファーに配置されません。They are not put in the execution buffer as Transact-SQL statements are.

    編集コマンドEditing Commands
    [:] ED[:] ED
    テキスト エディターを開始します。Starts the text editor. このエディターは、現在の Transact-SQL バッチまたは最後に実行したバッチを編集する場合に使用できます。This editor can be used to edit the current Transact-SQL batch, or the last executed batch. 最後に実行したバッチを編集するには、最後のバッチの実行が完了した直後に ED コマンドを入力する必要があります。To edit the last executed batch, the ED command must be typed immediately after the last batch has completed execution.

    テキスト エディターは、SQLCMDEDITOR 環境変数で定義したエディターです。The text editor is defined by the SQLCMDEDITOR environment variable. 既定のエディターは "Edit" です。The default editor is 'Edit'. エディターを変更するには、SQLCMDEDITOR 環境変数を設定します。To change the editor, set the SQLCMDEDITOR environment variable. たとえば、エディターを Microsoft メモ帳に設定するには、コマンド プロンプトで次のように入力します。For example, to set the editor to Microsoft Notepad, at the command prompt, type:


    [:] RESET[:] RESET
    ステートメント キャッシュをクリアします。Clears the statement cache.

    ステートメント キャッシュの内容を出力します。Prints the content of the statement cache.

    : Setvar < var> [ "" ]:Setvar <var> [ "value" ]
    sqlcmd スクリプト変数を定義します。Defines sqlcmd scripting variables. スクリプト変数は $(VARNAME)という形式になります。Scripting variables have the following format: $(VARNAME).

    変数名では大文字と小文字が区別されません。Variable names are case insensitive.

    スクリプト変数は次の方法で指定できます。Scripting variables can be set in the following ways:

  • コマンド ラインのオプションを暗黙的に使用します。Implicitly using a command-line option. たとえば、 -l オプションでは SQLCMDLOGINTIMEOUT という sqlcmd 変数が設定されます。For example, the -l option sets the SQLCMDLOGINTIMEOUT sqlcmd variable.

  • :Setvar コマンドを明示的に使用します。Explicitly by using the :Setvar command.

  • sqlcmdの実行前に環境変数を定義します。By defining an environment variable before you run sqlcmd.


-X オプションを使用すると、環境変数が sqlcmdに渡されなくなります。The -X option prevents environment variables from being passed on to sqlcmd.

:Setvar を使って定義した変数と環境変数が同じ名前の場合は、 :Setvar を使用して定義した変数が優先されます。If a variable defined by using :Setvar and an environment variable have the same name, the variable defined by using :Setvar takes precedence.

変数名には空白文字を含めることはできません。Variable names must not contain blank space characters.

また変数名には、$ (var) のような変数表現と同じ形式を使用することはできません。Variable names cannot have the same form as a variable expression, such as $(var).

スクリプト変数の文字列値に空白文字が含まれる場合は、値を引用符で囲みます。If the string value of the scripting variable contains blank spaces, enclose the value in quotation marks. スクリプト変数の値を設定していない場合は、そのスクリプト変数は削除されます。If a value for a scripting variable is not specified, the scripting variable is dropped.

現在設定されているスクリプト変数の一覧を表示します。Displays a list of the scripting variables that are currently set.


sqlcmdによって設定されたスクリプト変数および :Setvar コマンドを使用して設定されたスクリプト変数のみが表示されます。Only scripting variables that are set by sqlcmd, and those that are set using the :Setvar command will be displayed.

出力コマンドOutput Commands
:Error :Error
< filename >| STDERR|STDOUT< filename >| STDERR|STDOUT
すべてのエラー出力を、 file nameによって指定されたファイル、または stderrstdoutにリダイレクトします。Redirect all error output to the file specified by file name, to stderr or to stdout. Error コマンドは、スクリプト内で複数回使用できます。The Error command can appear multiple times in a script. 既定では、エラー出力は stderrに送られます。By default, error output is sent to stderr.

ファイル名file name
出力を受信するファイルを作成して開きます。Creates and opens a file that will receive the output. ファイルが既に存在している場合は、ファイルは 0 バイトに切り詰められます。If the file already exists, it will be truncated to zero bytes. 権限またはその他の理由でファイルが使用できない場合は、出力は切り替えられず、最後に指定した出力先または既定の出力先に送信されます。If the file is not available because of permissions or other reasons, the output will not be switched and will be sent to the last specified or default destination.

エラー出力を stderr ストリームに切り替えます。Switches error output to the stderr stream. ストリームがリダイレクトされている場合は、ストリームがリダイレクトされた対象がエラー出力を受信します。If this has been redirected, the target to which the stream has been redirected will receive the error output.

エラー出力を stdout ストリームに切り替えます。Switches error output to the stdout stream. ストリームがリダイレクトされている場合は、ストリームがリダイレクトされた対象がエラー出力を受信します。If this has been redirected, the target to which the stream has been redirected will receive the error output.

:Out < filename >| STDERR| STDOUT:Out < filename >| STDERR| STDOUT
すべてのクエリ結果を、 file nameによって指定されたファイル、または stderrstdoutに作成してリダイレクトします。Creates and redirects all query results to the file specified by file name, to stderr or to stdout. 既定では、出力は stdoutに送られます。By default, output is sent to stdout. ファイルが既に存在している場合は、ファイルは 0 バイトに切り詰められます。If the file already exists, it will be truncated to zero bytes. Out コマンドは、スクリプト内で複数回使用できます。The Out command can appear multiple times in a script.

:Perftrace < filename >| STDERR| STDOUT:Perftrace < filename >| STDERR| STDOUT
すべてのパフォーマンス トレース情報を、 file nameによって指定されたファイル、または stderrstdoutに作成してリダイレクトします。Creates and redirects all performance trace information to the file specified by file name, to stderr or to stdout. 既定では、パフォーマンス トレース出力は stdoutに送られます。By default performance trace output is sent to stdout. ファイルが既に存在している場合は、ファイルは 0 バイトに切り詰められます。If the file already exists, it will be truncated to zero bytes. Perftrace コマンドは、スクリプト内で複数回使用できます。The Perftrace command can appear multiple times in a script.

実行制御コマンドExecution Control Commands
:On Error[ exit | ignore]:On Error[ exit | ignore]
スクリプト実行中またはバッチ実行中のエラー発生時に対応するアクションを設定します。Sets the action to be performed when an error occurs during script or batch execution.

exit オプションを使用した場合、 sqlcmd は該当するエラー値を表示して終了します。When the exit option is used, sqlcmd exits with the appropriate error value.

ignore オプションを使用すると、 sqlcmd はエラーを無視し、バッチまたはスクリプトの実行を続行します。When the ignore option is used, sqlcmd ignores the error and continues executing the batch or script. 既定では、エラー メッセージが出力されます。By default, an error message will be printed.

[:] QUIT[:] QUIT
sqlcmd が終了します。Causes sqlcmd to exit.

[:] EXIT[ (statement) ][:] EXIT[ (statement) ]
sqlcmdからの戻り値に、SELECT ステートメントの結果を使用できます。Lets you use the result of a SELECT statement as the return value from sqlcmd. 数値の場合、結果行の最終行の第 1 列は、4 バイトの (長) 整数に変換されます。If numeric, the first column of the last result row is converted to a 4-byte integer (long). MS-DOS は、下位バイトを親プロセスやオペレーティング システムのエラー レベルに渡します。MS-DOS passes the low byte to the parent process or operating system error level. Windows 200x では、4 バイトの整数全体を渡します。Windows 200x passes the whole 4-byte integer. 構文は次のとおりです。The syntax is:


例 :For example:


バッチ ファイルの一部として、 EXIT パラメーターを使用することもできます。You can also include the EXIT parameter as part of a batch file. たとえば、コマンド プロンプトで次のように入力します。For example, at the command prompt, type:

sqlcmd -Q "EXIT(SELECT COUNT(*) FROM '%1')"

sqlcmd ユーティリティにより、かっこ () 内のすべての情報がサーバーに送信されます。The sqlcmd utility sends everything between the parentheses () to the server. システム ストアド プロシージャで 1 つの値セットを選択し、値を返すように指定した場合、返されるのは選択した値のみです。If a system stored procedure selects a set and returns a value, only the selection is returned. かっこ内に何も指定せずに EXIT () ステートメントを指定すると、バッチ内のそのステートメントより前にあるものすべてを実行し、戻り値を返さずに終了します。The EXIT () statement with nothing between the parentheses executes everything before it in the batch and then exits without a return value.

不適切なクエリを指定すると、 sqlcmd は戻り値を返さずに終了します。When an incorrect query is specified, sqlcmd will exit without a return value.

EXIT の形式を次に示します。Here is a list of EXIT formats:


    バッチを実行せずに直ちに終了し、値を返しません。Does not execute the batch, and then quits immediately and returns no value.

  • :EXIT ( ):EXIT( )

    バッチを実行してから終了し、値を返しません。Executes the batch, and then quits and returns no value.

  • :EXIT (query):EXIT(query)

    クエリを含むバッチを実行し、クエリの結果を返して終了します。Executes the batch that includes the query, and then quits after it returns the results of the query.

    RAISERROR を sqlcmd スクリプトの中で使用し、状態 127 が発生すると、 sqlcmd は終了し、メッセージ ID をクライアントに返します。If RAISERROR is used within a sqlcmd script and a state of 127 is raised, sqlcmd will quit and return the message ID back to the client. 例 :For example:

    RAISERROR(50001, 10, 127)

    このエラーが発生すると、 sqlcmd スクリプトは終了し、メッセージ ID 50001 がクライアントに返されます。This error will cause the sqlcmd script to end and return the message ID 50001 to the client.

    戻り値 -1 から -99 は SQL Server によって予約済みです。また、sqlcmd では次のような追加の戻り値を定義しています。The return values -1 to -99 are reserved by SQL Server, and sqlcmd defines the following additional return values:

戻り値Return Values [説明]Description
-100-100 戻り値を選択する前に、エラーが発生した。Error encountered prior to selecting return value.
-101-101 戻り値を選択するときに、行が見つからなかった。No rows found when selecting return value.
-102-102 戻り値を選択するときに、変換エラーが発生した。Conversion error occurred when selecting return value.

GO [count]GO [count]
GO は、バッチの終わりとキャッシュされた Transact-SQL ステートメントの実行を知らせます。GO signals both the end of a batch and the execution of any cached Transact-SQL statements. バッチの個別バッチとして複数回実行します。The batch is executed multiple times as separate batches. 1 つのバッチで 1 回以上の変数を宣言することはできません。You cannot declare a variable more than once in a single batch.

その他のコマンドMiscellaneous Commands
:r < filename >:r < filename >
<filename> によって指定されたファイルを基に、追加の Transact-SQL ステートメントと sqlcmd コマンドを解析し、ステートメント キャッシュ内に登録します。Parses additional Transact-SQL statements and sqlcmd commands from the file specified by <filename> into the statement cache.

GO が最後に記述されていない Transact-SQL ステートメントがファイルに含まれている場合は、その行の :r の後に GO を入力する必要があります。If the file contains Transact-SQL statements that are not followed by GO, you must enter GO on the line that follows :r.


< filename > は、sqlcmd が実行されたスタートアップ ディレクトリと関連して読み取られます。< filename > is read relative to the startup directory in which sqlcmd was run.

ファイルは、バッチ ターミネータが検出された後に読み取られ、実行されます。The file will be read and executed after a batch terminator is encountered. :r コマンドは複数発行できます。You can issue multiple :r commands. ファイルには、どのような sqlcmd コマンドでも含めることができます。The file may include any sqlcmd command. これには、バッチ ターミネータの GOも含まれます。This includes the batch terminator GO.


対話モードで表示される行数は、 :r コマンドが検出されるたびに、1 行ずつ増えます。The line count that is displayed in interactive mode will be increased by one for every :r command encountered. :r コマンドは、リスト コマンドの出力に表示されます。The :r command will appear in the output of the list command.

ローカルに構成されたサーバーと、ネットワーク上でブロードキャストしているサーバー名の一覧を表示します。Lists the locally configured servers and the names of the servers broadcasting on the network.

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]]:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]]
SQL Server のインスタンスに接続します。Connects to an instance of SQL Server . また、現在の接続を終了します。Also closes the current connection.

タイムアウト オプション :Time-out options:

00 待機状態を維持wait forever
n>0n>0 n 秒間待機wait for n seconds

SQLCMDSERVER スクリプト変数により、現在のアクティブな接続が反映されます。The SQLCMDSERVER scripting variable will reflect the current active connection.

timeout を指定しないと、SQLCMDLOGINTIMEOUT 変数の値が既定値になります。If timeout is not specified, the value of the SQLCMDLOGINTIMEOUT variable is the default.

user_name のみを指定した場合 (オプションとして指定した場合も、環境変数として指定した場合も)、ユーザーはパスワードの入力を要求されます。If only user_name is specified (either as an option, or as an environment variable), the user will be prompted to enter a password. SQLCMDUSER 環境変数または SQLCMDPASSWORD 環境変数が設定されている場合は、この限りではありません。This is not true if the SQLCMDUSER or SQLCMDPASSWORD environment variables have been set. オプションも環境変数も指定されない場合は、Windows 認証モードを使用してサインインします。If neither options nor environment variables are provided, Windows Authentication mode is used to sign in. たとえば、統合セキュリティを使用して、SQL Server myserver のインスタンス instance1 に接続するには、次を使用します。For example to connect to an instance, instance1, of SQL Server , myserver, by using integrated security you would use the following:

:connect myserver\instance1

スクリプト変数を使用して myserver の既定のインスタンスに接続するには、次を使用します。To connect to the default instance of myserver using scripting variables, you would use the following:

:setvar myusername test

:setvar myservername myserver

:connect $(myservername) $(myusername)

[:] !!< command>[:] !!< command>
オペレーティング システムのコマンドを実行します。Executes operating system commands. オペレーティング システムのコマンドを実行するには、行頭に 2 つの感嘆符 (!!) を入力し、続けてオペレーティング システムのコマンドを入力します。To execute an operating system command, start a line with two exclamation marks (!!) followed by the operating system command. 例 :For example:

:!! Dir


コマンドは sqlcmd を実行中のコンピューター上で実行されます。The command is executed on the computer on which sqlcmd is running.

詳細については、このトピックの「 XML 出力形式 」と「 JSON 出力形式 」を参照してください。For more information, see XML Output Format and JSON Output Format in this topic

sqlcmd コマンドと各コマンドの短い説明を一覧表示します。Lists sqlcmd commands together with a short description of each command.

sqlcmd のファイル名sqlcmd File Names

sqlcmd の入力ファイルは -i オプションまたは :r コマンドで指定できます。sqlcmd input files can be specified with the -i option or the :r command. 出力ファイルは -o オプションまたは :Error:Out 、および :Perftrace コマンドで指定できます。Output files can be specified with the -o option or the :Error, :Out and :Perftrace commands. 指定するファイルについてのガイドラインを次に示します。The following are some guidelines for working with these files:

  • :Error:Out、および :Perftrace には、個別の <filename> を使用する必要があります。:Error, :Out and :Perftrace should use separate <filename>. 同じ <filename> を使用すると、各コマンドからの入力が混在する場合があります。If the same <filename> is used, inputs from the commands may be intermixed.

  • ローカル コンピューターの sqlcmd からリモート サーバー上の入力ファイルが呼び出され、ファイルに :out c:\OutputFile.txt のようにドライブ パスが含まれていると、If an input file that is located on a remote server is called from sqlcmd on a local computer and the file contains a drive file path such as :out c:\OutputFile.txt. 出力ファイルはリモート サーバーではなく、ローカル コンピューター上に作成されます。The output file will be created on the local computer and not on the remote server.

  • 有効なファイル パスには、 C:\<filename>\\<Server>\<Share$>\<filename>"C:\Some Folder\<file name>"があります。Valid file paths include: C:\<filename>, \\<Server>\<Share$>\<filename> and "C:\Some Folder\<file name>". パスに空白が含まれる場合は、引用符を使用します。If there is a space in the path, use quotation marks.

  • 各新規 sqlcmd セッションにより、同じ名前の既存のファイルが上書きされます。Each new sqlcmd session will overwrite existing files that have the same names.

情報メッセージInformational Messages

sqlcmd は、サーバーから送信されたすべての情報メッセージを出力します。sqlcmd prints any informational message that is sent by the server. 次の例では、Transact-SQL ステートメントが実行された後、情報メッセージが出力されます。In the following example, after the Transact-SQL statements are executed, an informational message is printed.

コマンド プロンプトで、次のように入力します:At the command prompt, type the following:


Sqlcmd プロンプトの種類。At the sqlcmd prompt type:

USE AdventureWorks2012;


Enter キーを押すと、"データベース コンテキストが 'AdventureWorks2012' に変更されました。" という情報メッセージが出力されます。When you press ENTER, the following informational message is printed: "Changed database context to 'AdventureWorks2012'."

Transact-SQL クエリからの出力形式Output Format from Transact-SQL Queries

まず、sqlcmd は SELECT リストで指定した列名を含む列ヘッダーを出力します。sqlcmd first prints a column header that contains the column names specified in the select list. 列名は、SQLCMDCOLSEP で指定された文字を使用して分割されます。The column names are separated by using the SQLCMDCOLSEP character. 既定では、空白です。By default, this is a space. 列名が列幅よりも短い場合は、出力は次の列まで空白で埋められます。If the column name is shorter than the column width, the output is padded with spaces up to the next column.

この行の次には区切り行が出力されます。区切り行は、連続したダッシュ文字です。This line will be followed by a separator line that is a series of dash characters. 次に出力の例を示します。The following output shows an example.

sqlcmdを開始します。Start sqlcmd. sqlcmd コマンド プロンプトで次のように入力します。At the sqlcmd command prompt, type the following:

USE AdventureWorks2012;

SELECT TOP (2) BusinessEntityID, FirstName, LastName

FROM Person.Person;


Enter キーを押すと、次の結果セットが返されます。When you press ENTER, the following result set is retuned.

BusinessEntityID FirstName LastName

---------------- ------------ ----------

285 Syed Abbas

293 Catherine Abel

(2 row(s) affected)

BusinessEntityID 列には 4 文字分の幅しかありませんが、長い列名に合わせるため拡張されています。Although the BusinessEntityID column is only 4 characters wide, it has been expanded to accommodate the longer column name. 既定では、出力は 80 文字で終了します。By default, output is terminated at 80 characters. この設定は、 -w オプションを使用するか、SQLCMDCOLWIDTH スクリプト変数を設定することで変更できます。This can be changed by using the -w option, or by setting the SQLCMDCOLWIDTH scripting variable.

XML 出力形式XML Output Format

FOR XML 句からの結果である XML 出力は、連続するストリームでフォーマットされずに出力されます。XML output that is the result of a FOR XML clause is output, unformatted, in a continuous stream.

XML 出力を行うには、 :XML ONコマンドを使用します。When you expect XML output, use the following command: :XML ON.


sqlcmd は、通常の形式のエラー メッセージを返します。sqlcmd returns error messages in the usual format. エラー メッセージが XML 形式の XML テキスト ストリームで出力されることにも注意してください。Notice that the error messages are also output in the XML text stream in XML format. :XML ONを使用すると、 sqlcmd は情報メッセージを表示しません。By using :XML ON, sqlcmd does not display informational messages.

XML モードをオフにするには、:XML OFF コマンドを使用します。To set the XML mode off, use the following command: :XML OFF.

XML OFF コマンドは sqlcmd を行指向の出力に切り替えるので、XML OFF コマンドの実行前に GO コマンドは指定しないでください。The GO command should not appear before the XML OFF command is issued because the XML OFF command switches sqlcmd back to row-oriented output.

XML (ストリーム入力) データと行セットのデータは、混在することはできません。XML (streamed) data and rowset data cannot be mixed. XML ストリームを出力する Transact-SQL ステートメントの実行前に、XML ON コマンドが実行されていない場合は、正しく出力されません。If the XML ON command has not been issued before a Transact-SQL statement that outputs XML streams is executed, the output will be garbled. XML ON コマンドが実行されている場合、通常の行セットを出力する Transact-SQL ステートメントは実行できません。If the XML ON command has been issued, you cannot execute Transact-SQL statements that output regular row sets.


:XML コマンドは SET STATISTICS XML ステートメントをサポートしません。The :XML command does not support the SET STATISTICS XML statement.

JSON 出力形式JSON Output Format

JSON 出力を行うには、 :XML ONコマンドを使用します。When you expect JSON output, use the following command: :XML ON. これを使用しないと、出力には、列名と JSON テキストの両方が含まれます。Otherwise the output includes both the column name and the JSON text. この出力は、有効な JSON ではありません。This output is not valid JSON.

XML モードをオフにするには、 :XML OFFコマンドを使用します。To set the XML mode off, use the following command: :XML OFF.

詳細については、このトピックの「 XML 出力形式 」を参照してください。For more info, see XML Output Format in this topic.

Azure Active Directory 認証の利用Using Azure Active Directory Authentication

Azure Active Directory 認証の利用例Examples using Azure Active Directory Authentication:

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -U bob@contoso.com -P MyAADPassword -G -l 30

sqlcmd のベスト プラクティスsqlcmd Best Practices

次の説明を参考にして、セキュリティと効率を最大にしてください。Use the following practices to help maximize security and efficiency.

  • 統合セキュリティを使用します。Use integrated security.

  • 自動化された環境では -X を使用します。Use -X in automated environments.

  • 適切な NTFS ファイル システム権限を使用して、入力ファイルと出力ファイルのセキュリティを保護します。Secure input and output files by using appropriate NTFS file system permissions.

  • パフォーマンスを向上させるには、複数のセッションではなく、1 つの sqlcmd セッションの中で、できるだけ作業するようにします。To increase performance, do as much in one sqlcmd session as you can, instead of in a series of sessions.

  • バッチまたはクエリ実行のタイムアウト値を、推定所要時間よりも長めに設定します。Set time-out values for batch or query execution higher than you expect it will take to execute the batch or query.

参照See Also

sqlcmd ユーティリティの起動 Start the sqlcmd Utility
sqlcmd を使用した Transact-SQL スクリプト ファイルの実行 Run Transact-SQL Script Files Using sqlcmd
sqlcmd ユーティリティの使用 Use the sqlcmd Utility
sqlcmd でのスクリプト変数の使用 Use sqlcmd with Scripting Variables
sqlcmd によるデータベース エンジンへの接続 Connect to the Database Engine With sqlcmd
クエリ エディターによる SQLCMD スクリプトの編集 Edit SQLCMD Scripts with Query Editor
ジョブ ステップの管理 Manage Job Steps
CmdExec ジョブ ステップの作成Create a CmdExec Job Step