コマンドツール

[もどる]


sqlcmd

コマンドオプション

Windows 認証で SQL Server Express に接続する例

-E は Windows 認証の指定、-S は SQL Server インスタンスの指定である。この例ではデータベースを指定していないので、後からコマンドプロンプトで use コマンドでデータベースを指定する必要がある。

  sqlcmd -E -S localhost\SQLEXPRESS
 

SQL Server 認証で SQL Server Express に接続する例

-U はユーザIDの指定、-P はパスワードの指定を行う。-S は SQL Server インスタンスの指定であり、-d はデータベースの指定である。

  sqlcmd -U sa -P xxxxxx -S localhost\SQLEXPRESS -d test
 

SELECT を実行する例

-Q で実行する SQL を指定できる。-q でも可能だが、sqlcmd が終了しない。-s はフィールドの区切り文字を指定する。ここではカンマを指定している。-W はフィールドを詰めて表示する。この指定がないと、フィールドの長さに応じてスペースが入る。

sqlcmd -E -S localhost\SQLEXPRESS -d test -Q "SELECT * FROM dbo.TRAINCLASS" -s "," -W
 

SQL ファイルを実行する例

-Q オプションでは直接 SQL を指定できたが、長い SQL だとこの方法は適さない。-i オプションを使うと SQL ファイルを実行できる。

sqlcmd -E -S localhost\SQLEXPRESS -d test -i C:\temp\Query1.sql -s "," -W
 

この場合、"(xxx 行処理されました)" などと不要な行が入る。これを抑制するには、SQL ファイルの先頭に "SET NOCOUNT ON" という行を入れておくとよい。

SET NOCOUNT ON

SELECT
  TRAINCODE AS 列車番号,
  DEPARTURE AS 発車時刻,
  REMARKS AS 備考
FROM
  dbo.TIMETABLE
ORDER BY
  DEPARTURE;

-o オプションを使うと画面でなくファイルに結果を出力できる。さらに、下の例では -h オプションでヘッダー行の出力を抑止している。

sqlcmd -E -S localhost\SQLEXPRESS -d test -i C:\temp\Query1.sql -o c:\temp\Result.csv -s "," -W -h -1
 

 

sqlcmd コマンド

sqlcmd で SQL Server に接続すると ">" が表示される。この段階でいくつかのコマンドが使用できる。よく使うものとして以下の表示に示す。

コマンド機能使用例
quit終了quit (:quitでもよい)
goコマンドバッファの内容を実行する。go
:rSQL ファイルの読み込みと実行。:rc:\temp\Query1.sql
:setvarスクリプト変数を定義する。:setvar sta 'xxxxx'
select * from dbo.STATIONS where station=$(sta);
:listvarスクリプト変数一覧を表示する。:listvar
:listステートメントキャッシュを表示する。:list
:resetステートメントキャッシュをクリアする。:reset

 

bcp

bcp は CSV ファイルのインポートとエクスポートを行うためのコマンドである。

フォーマットファイルなしでインポート、エクスポートする例である。 -c 無しの場合は、プロンプトが表示されて自動的にフォーマットファイルが作成されます。 インポートファイルの文字コードはシフトJIS、フィールド区切りはカンマ、行末はCRLFを仮定している。 ファイルの先頭行はヘッダで、これを無視するようにしている。

インポートの場合

@echo off
rem -S {data source}
rem -T trusted connection
rem -F {header count}
rem -d {initial catalog}
rem -f {format file}
rem -k keep NULL
rem -t {field termination char}
rem -c no prompts
rem -E keep ID (Primary key) value
bcp dbo.Codes in c:\temp\Codes.csv -S localhost -d S3App -T -F 1 -k -t , -c -E

次のようなエラーメッセージが表示されましたが、インポートは正常に行われた。

コピーを開始しています...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]キャストした文字コードが無効で
す。

12 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 1      平均 : (12000.00 行/秒)

エクスポートの場合

エクスポートの場合は方向指示を in でなく out にしている。 あとは同じでよい。

C:\temp> bcp dbo.Codes out c:\temp\CodesOut.csv -S localhost -d S3App -T -F 1 -k -t , -c -E

この記事は、下記のリンク先と同じ内容である。

SQL Server: bcp ユーティリティの使用例