sqlcmd
ユーティリティは、Transact-SQL ステートメントとスクリプトのアドホックな対話型実行と、Transact-SQL スクリプト タスクの自動化のためのコマンド ライン ユーティリティです。
sqlcmd
を対話形式で使用したり、sqlcmd
を使用して実行するスクリプト ファイルを作成したりするには、Transact-SQL を理解する必要があります。
sqlcmd
ユーティリティは、通常、次の方法で使用されます。
ユーザーは、コマンド プロンプトで作業するのと同様の方法で、Transact-SQL ステートメントを対話形式で入力します。 結果はコマンド プロンプトに表示されます。 コマンド プロンプト ウィンドウを開くには、[ スタート] をクリックし、[ すべてのプログラム] をクリックし、[ アクセサリ] をポイントして、[ コマンド プロンプト] をクリックします。 コマンド プロンプトで「
sqlcmd
」と入力し、その後に必要なオプションのリストを入力します。sqlcmd
でサポートされているオプションの完全な一覧については、「sqlcmd ユーティリティ」を参照してください。ユーザーは、実行する単一
sqlcmd
の Transact-SQL ステートメントを指定するか、実行するステートメントを含むテキスト ファイルにユーティリティを指定して、Transact-SQL ジョブを送信します。 通常、出力はテキスト ファイルに送られますが、コマンド プロンプトに表示することもできます。SQL Server Management Studio クエリ エディターの SQLCMD モード。
SQL Server 管理オブジェクト (SMO)
SQL Server エージェントの CmdExec ジョブ
通常使用される sqlcmd オプション
最も頻繁に使用されるオプションは次のとおりです。
sqlcmd
が接続する Microsoft SQL Server のインスタンスを識別するサーバー オプション (-S)。SQL Server のインスタンスへの接続に使用
sqlcmd
資格情報を指定する認証オプション (-E、-U、および -P)。注
-E オプションは既定値であり、指定する必要はありません。
sqlcmd
する入力の場所を識別する入力オプション (-Q、-q、および -i)。sqlcmd
が出力を配置するファイルを指定する出力オプション (-o)。
sqlcmd ユーティリティへの接続
sqlcmd
ユーティリティの一般的な用途を次に示します。
Windows 認証を使用して既定のインスタンスに接続し、Transact-SQL ステートメントを対話形式で実行します。
sqlcmd -S <ComputerName>
注
前の例では、 -E は既定値であり、
sqlcmd
は Windows 認証を使用して既定のインスタンスに接続するため、指定されていません。Windows 認証を使用して名前付きインスタンスに接続し、Transact-SQL ステートメントを対話形式で実行します。
sqlcmd -S <ComputerName>\<InstanceName>
又は
sqlcmd -S .\<InstanceName>
Windows 認証を使用して名前付きインスタンスに接続し、入力ファイルと出力ファイルを指定します。
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
Windows 認証を使用してローカル コンピューター上の既定のインスタンスに接続し、クエリを実行し、クエリの実行が完了した後
sqlcmd
実行したままにします。sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"
Windows 認証を使用してローカル コンピューター上の既定のインスタンスに接続し、クエリを実行し、出力をファイルに送信し、クエリの実行が完了した後
sqlcmd
終了します。sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt
SQL Server 認証を使用して名前付きインスタンスに接続し、Transact-SQL ステートメントを対話形式で実行し、
sqlcmd
パスワードの入力を求めます。sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
注
sqlcmd
ユーティリティでサポートされているオプションの一覧を表示するには、sqlcmd -?
を実行します。
sqlcmd を使用した Transact-SQL ステートメントの対話形式での実行
sqlcmd
ユーティリティを対話的に使用して、コマンド プロンプト ウィンドウで Transact-SQL ステートメントを実行できます。
sqlcmd
を使用して Transact-SQL ステートメントを対話形式で実行するには、-Q、-q、-Z、または -i オプションを使用せずにユーティリティを実行して、入力ファイルまたはクエリを指定します。 例えば次が挙げられます。
sqlcmd -S <ComputerName>\<InstanceName>
コマンドを入力ファイルまたはクエリなしで実行すると、 sqlcmd
は指定された SQL Server インスタンスに接続し、 1>
を含む新しい行の後に、 sqlcmd
プロンプトという名前の点滅するアンダースコアが表示されます。
1
は、これが Transact-SQL ステートメントの最初の行であることを示し、sqlcmd
プロンプトは、Transact-SQL ステートメントを入力したときに開始する位置です。
sqlcmd
プロンプトで、Transact-SQL ステートメントとGO
やEXIT
などのsqlcmd
コマンドの両方を入力できます。 各 Transact-SQL ステートメントは、ステートメント キャッシュと呼ばれるバッファーに格納されます。 これらのステートメントは、 GO
コマンドを入力して Enter キーを押すと、SQL Server に送信されます。
sqlcmd
を終了するには、新しい行の先頭に「EXIT
またはQUIT
」と入力します。
ステートメント キャッシュをクリアするには、「:RESET
」と入力します。
^C
入力すると、sqlcmd
が終了します。
^C
を使用して、 GO
コマンドの発行後にステートメント キャッシュの実行を停止することもできます。
対話型セッションに入力された Transact-SQL ステートメントは、 :ED コマンドと sqlcmd
プロンプトを入力して編集できます。 エディターが開き、Transact-SQL ステートメントを編集してエディターを閉じると、変更した Transact-SQL ステートメントがコマンド ウィンドウに表示されます。
GO
を入力して、修正版の Transact-SQL ステートメントを実行します。
引用符で囲まれた文字列
引用符で囲まれた文字列は、前処理がまったく行われずそのまま使用されます。ただし、例外として、2 つの連続する引用符を入力することで、引用符自体を文字列に挿入できます。 SQL Server は、この文字の並びを 1 つの引用符として扱います (ただし、変換はサーバーで行われます)。スクリプト変数は、文字列内に表示されるときに展開されません。
例えば次が挙げられます。
sqlcmd
PRINT "Length: 5"" 7'";
GO
結果セットを次に示します。
Length: 5" 7'
複数行にまたがる文字列
sqlcmd
では、複数行にまたがる文字列を含むスクリプトがサポートされています。 たとえば、次の SELECT
ステートメントは複数行にまたがるが、 GO
入力した後に Enter キーを押すと実行される 1 つの文字列です。
SELECT First line
FROM Second line
WHERE Third line;
GO
対話型 sqlcmd の例
これは、対話形式で sqlcmd
実行したときに表示される内容の例です。
コマンド プロンプト ウィンドウを開くと、次のような 1 行があります。
C:\> _
これは、 C:\
フォルダーが現在のフォルダーであることを意味し、ファイル名を指定すると、Windows はそのフォルダー内のファイルを検索します。
sqlcmd
入力してローカル コンピューター上の SQL Server の既定のインスタンスに接続します。コマンド プロンプト ウィンドウの内容は次のようになります。
C:\>sqlcmd
1> _
つまり、SQL Server のインスタンスに接続し、 sqlcmd
Transact-SQL ステートメントと sqlcmd
コマンドを受け入れる準備ができました。
1>
の後の点滅するアンダースコアは、入力したステートメントとコマンドが表示される場所を示すsqlcmd
プロンプトです。 次に、「 USE AdventureWorks2012
」と入力して Enter キーを押し、「 GO
」と入力して Enter キーを押します。 コマンド プロンプト ウィンドウの内容は次のようになります。
sqlcmd
USE AdventureWorks2012;
GO
結果セットを次に示します。
Changed database context to 'AdventureWorks2012'.
1> _
USE AdventureWorks2012
を入力した後、Enterキーを押すと、新しい行開始のシグナルsqlcmd
が送信されます。
GO,
キー(Enter)を押すと、USE AdventureWorks2012
ステートメントがsqlcmd
によりSQL Serverのインスタンスに送信されるよう通知されます。
sqlcmd
次に、 USE
ステートメントが正常に完了したことを示すメッセージを返し、新しいステートメントまたはコマンドを入力するためのシグナルとして新しい 1>
プロンプトを表示しました。
次の例は、SELECT
ステートメント、SELECT
を実行するGO
、sqlcmd
を終了するEXIT
を入力した場合のコマンド プロンプト ウィンドウの内容を示しています。
sqlcmd
USE AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
結果セットを次に示します。
BusinessEntityID FirstName LastName
----------- -------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
1> EXIT
C:\>
行 3> GO
の後の行は、 SELECT
ステートメントの出力です。 出力を生成した後、sqlcmd
sqlcmd
プロンプトをリセットし、1>
を表示します。
1>
行にEXIT
入力すると、コマンド プロンプト ウィンドウに、最初に開いたときと同じ行が表示されます。 これは、 sqlcmd
がセッションを終了したことを示します。 その状態で再度 EXIT
コマンドを入力すると、コマンド プロンプト ウィンドウを閉じることができます。
sqlcmd を使用した Transact-SQL スクリプト ファイルの実行
sqlcmd
を使用して、データベース スクリプト ファイルを実行できます。 スクリプト ファイルは、Transact-SQL ステートメント、 sqlcmd
コマンド、およびスクリプト変数の組み合わせを含むテキスト ファイルです。 変数をスクリプト化する方法の詳細については、「 sqlcmd でのスクリプト変数の使用」をご覧ください。
sqlcmd
は、対話形式で入力されるステートメントやコマンドと同様の方法で、スクリプト ファイル内のステートメント、コマンド、およびスクリプト変数と連携します。 主な違いは、 sqlcmd
ユーザーがステートメント、コマンド、およびスクリプト変数を入力するのを待つのではなく、一時停止せずに入力ファイルを読み取るということです。
データベース スクリプト ファイルの作成方法はいくつかあります。
SQL Server Management Studio で一連の Transact-SQL ステートメントを対話形式でビルドしてデバッグし、クエリ ウィンドウの内容をスクリプト ファイルとして保存できます。
メモ帳などのテキスト エディターを使用して、Transact-SQL ステートメントを含むテキスト ファイルを作成できます。
例示
A。 sqlcmd を使用したスクリプトの実行
メモ帳を起動し、次の Transact-SQL ステートメントを入力します。
USE AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
MyFolder
というフォルダーを作成し、スクリプトを MyScript.sql
ファイルとして C:\MyFolder
フォルダーに保存します。 コマンド プロンプトで次のように入力してスクリプトを実行し、MyOutput.txt
のMyFolder
に出力を配置します。
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
メモ帳で MyOutput.txt
の内容を表示すると、次の内容が表示されます。
Changed database context to 'AdventureWorks2012'.
BusinessEntityID FirstName LastName
---------------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
B. 専用管理接続での sqlcmd の使用
次の例では、 sqlcmd
を使用して、専用管理者接続 (DAC) を使用して、ブロックの問題があるサーバーに接続します。
C:\>sqlcmd -S ServerName -A
1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;
2> GO
結果セットを次に示します。
spid blocked
------ -------
62 64
(1 rows affected)
ブロック プロセスを終了するには、 sqlcmd
を使用します。
1> KILL 64;
2> GO
C. sqlcmd を使用してストアド プロシージャを実行する
次の例は、 sqlcmd
を使用してストアド プロシージャを実行する方法を示しています。 次のストアド プロシージャを作成します。
USE AdventureWorks2012;
IF OBJECT_ID ( ' dbo.ContactEmailAddress, 'P' ) IS NOT NULL
DROP PROCEDURE dbo.ContactEmailAddress;
GO
CREATE PROCEDURE dbo.ContactEmailAddress
(
@FirstName nvarchar(50)
,@LastName nvarchar(50)
)
AS
SET NOCOUNT ON
SELECT EmailAddress
FROM Person.Person
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF
sqlcmd
プロンプトで、次のように入力します。
C:\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. データベースメンテナンスに sqlcmd を使用する
次の例は、データベース メンテナンス タスクに sqlcmd
を使用する方法を示しています。 次のコードを使用して C:\BackupTemplate.sql
を作成します。
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
sqlcmd
プロンプトで、次のように入力します。
C:\ >sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile c:\msdb.bak
1> :r c:\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
E. sqlcmd を使用して複数のインスタンスでコードを実行する
ファイル内の次のコードは、2 つのインスタンスに接続するスクリプトです。 2 番目のインスタンスへの接続の前に GO
が記述されていることに注意してください。
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. XML 出力の返却
次の例では、XML 出力が、連続するストリームでフォーマットされずに返されます。
C:\>sqlcmd -d AdventureWorks2012
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
F. Windows スクリプト ファイルでの sqlcmd の使用
sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt,
などのsqlcmd
コマンドは、VBScript と共に .bat ファイルで実行できます。 この場合は、対話型オプションを使用しないでください。
sqlcmd
は、.bat ファイルを実行しているコンピューターにインストールする必要があります。
まず、次の 4 つのファイルを作成します。
C:\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\goodscript.sql
SELECT 'batch #1' GO SELECT 'batch #2' GO
C:\returnvalue.sql
:exit(select 100) @echo off C:\windowsscript.bat @echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
C:\windowsscript.bat
@echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
その後、コマンド プロンプトで次のように C:\windowsscript.bat
を実行します。
C:\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell
G. sqlcmd を使用した Azure SQL Database での暗号化の設定
SQL Database データへの接続で sqlcmd
を実行して、暗号化と証明書の信頼を指定できます。 2 つの 'sqlcmd'''オプションを使用できます。
-N スイッチは、暗号化された接続を要求するためにクライアントによって使用されます。 このオプションは、ADO.net オプションの
ENCRYPT = true
と同等です。-C スイッチは、クライアントが信頼サーバー証明書を暗黙的に構成し、検証しないように構成するために使用されます。 このオプションは、ADO.net オプションの
TRUSTSERVERCERTIFICATE = true
と同等です。
SQL Database サービスは、SQL Server インスタンスで使用できるすべての SET
オプションをサポートしているわけではありません。 次のオプションは、SET
オプションを ON
または OFF
に設定するとエラーが発生します。
SET ANSI_DEFAULTS
SET ANSI_NULLS
SET REMOTE_PROC_TRANSACTIONS (リモート手続きトランザクションを設定)
SET ANSI_NULL_DEFAULT
次の SET オプションは例外をスローしませんが、使用できません。 これらは非推奨です。
SET CONCAT_NULL_YIELDS_NULL (連結時に NULL を使用することを許可する設定)
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
構文
次の例は、SQL Server ネイティブ クライアント プロバイダーの設定に次のようなケースを示します。 ForceProtocolEncryption = False
、 Trust Server Certificate = No
Windows 資格情報を使用して接続し、通信を暗号化する:
SQLCMD -E -N
Windows 資格情報を使用して接続し、サーバーの証明書を信頼する:
SQLCMD -E -C
Windows 資格情報を使用して接続し、通信を暗号化して、サーバーの証明書を信頼する:
SQLCMD -E -N -C
次の例は、SQL Server Native Client Provider の設定に次のようなケースを示しています: ForceProtocolEncryption = True
、 TrustServerCertificate = Yes
。
Windows 資格情報を使用して接続し、通信を暗号化して、サーバーの証明書を信頼する:
SQLCMD -E
Windows 資格情報を使用して接続し、通信を暗号化して、サーバーの証明書を信頼する:
SQLCMD -E -N
Windows 資格情報を使用して接続し、通信を暗号化して、サーバーの証明書を信頼する:
SQLCMD -E -T
Windows 資格情報を使用して接続し、通信を暗号化して、サーバーの証明書を信頼する:
SQLCMD -E -N -C
プロバイダーが ForceProtocolEncryption = True
を指定した場合、接続文字列に Encrypt=No
場合でも暗号化が有効になります。
こちらもご覧ください
sqlcmd ユーティリティ
sqlcmd でのスクリプト変数の使用
クエリ エディターによる SQLCMD スクリプトの編集
ジョブ ステップの管理
CmdExec ジョブ ステップの作成