Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

SQLServer バッチ処理 (Batch Scripts)

バッチファイルでSQLServerに接続する方法~sqlcmdの各オプション挙動を実例で紹介~

投稿日:2020年11月12日 更新日:

<目次>

(1) バッチファイルでSQLServerに接続する方法
 (1-1) 構文
 (1-2) オプションの説明
 (1-3) 各オプションの挙動をサンプルで確認

(1) バッチファイルでSQLServerに接続する方法

(1-1) 構文

SQLServerに接続するためには「sqlcmd」というコマンドを使います。

sqlcmd -S [ホスト名]

「sqlcmd」は随時で対話的に「Transact-SQL」(=SQLの拡張言語)のステートメント(≒有効なSQLコマンド)やスクリプトを実行するための、コマンドラインユーティリティです(OracleでいうSQL*Plusのような機能)。

主に実行方法は2つあり、1つ目は単一のTransact-SQLステートメントをコマンドプロンプトから実行する方法と、2つ目は「Transact-SQL」を含むテキストファイルをsqlcmdに参照させることで実行もできます。

上記の構文をコマンドプロンプトから実行すると、内部的には「sqlcmd.exe」が実行され、データベースへの接続を行います。正常に接続できると、プロンプトに「1>」の表示がされます。これはsqlcmdプロンプトと呼ばれています(1は開始地点の意味の1)。

(図111)「-S」オプションでホスト名を指定して接続

(図112)接続後はSQL等を実行できる

目次にもどる

(1-2) オプションの説明

「sqlcmd」コマンドには様々なオプションがありますが、その内の代表的なオプションについてご紹介します。
(表)

認証系 -S ■Windows認証でホスト/インスタンス接続
①「ホスト名」で接続
接続先の「ホスト名」を指定すると、「Windows認証」でデフォルトのインスタンスに接続します。
(例)
sqlcmd -S [HostName]

②「ホスト名\インスタンス名」で接続
接続先の「ホスト名\インスタンス名」を指定すると、「Windows認証」で指定したインスタンスに接続します。
(例)
sqlcmd -S [HostName]\[InstanceName]

認証系 -U ■SQLServer認証でホスト/インスタンス接続
「-U」の後にユーザー名(saユーザとか)を指定して接続試行すると、パスワードの入力を求めるプロンプトが起動します。
(例)
sqlcmd -U [UserName] -S [HostName]
認証系 -P SQL認証でのユーザーのパスワードを指定。
認証系 -E 信頼接続(統合認証)で利用します。
SQLクエリ系 -q ・SQLクエリを指定して実行し、結果をsqlcmdコンソールに表示します。
・クエリ実行後はsqlcmdは継続して動き続けます(入力待ちが継続する)

(例)テーブルからSELECTでレコードを取得
sqlcmd -q “SELECT * FROM [SOME TABLE]”

SQLクエリ系 -Q ・SQLクエリを指定して実行し、結果をsqlcmdコンソールに表示します。
・クエリ実行後はsqlcmdをexit(終了)します(通常のcmdプロンプトに戻る)

(例)テーブルからSELECTでレコードを取得
sqlcmd -Q “SELECT * FROM [SOME TABLE]”

入力系 -i 入力として使用するインプットファイル(SQLファイル)を指定します。
(例)
sqlcmd -S [HostName]\[InstanceName] -i XXXX.sql
入力系 -d [データベース名](masterやtempなど)を指定すると、sqlcmdの開始時に「USE [データベース名]」を発行します。
(例)テーブルからSELECTでレコードを取得
sqlcmd -d [master] -Q “SELECT * FROM [SOME TABLE]”
入力系 -s カラムの区切り文字を指定。
出力系 -o sqlcmdの実行結果の出力先を指定します。
指定はアウトプットファイル(のパス)を指定します。
(例)「-Q」でSQL実行した結果を「-o」でテキストファイルに出力。
sqlcmd -Q “SELECT * FROM [SOME TABLE]” -o Output.txt
エラー処理系 -b バッチジョブがエラーになった場合に終了します。
タイムアウト系 -l sqlcmdのサーバ接続試行時のタイムアウト時間を指定します。
構文・処理系 -I ONにするとダブルクォーテーション「”」で囲まれた文言が「識別子=Identifier」(≒テーブル名、カラム名などの識別子」として扱われます。
逆にOFFだとダブルクォーテーションもリテラル(べた書きの文字)として扱われてしまいます。
構文・処理系 -W 列から後続の空白を削除。

目次にもどる

(1-3) 各オプションの挙動をサンプルで確認

(図132)「-U」オプション

(図131)「-P」オプション

(図133)「-E」オプション

(図134)「-q」オプション

(図135)「-Q」オプション

(図136)「-i」オプション

(図137)「-d」オプション

(図138)「-s」オプション

(図139)「-o」オプション

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-SQLServer, バッチ処理 (Batch Scripts)

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

データベースのインデックスの基本と種類とOracleやSQL Serverでの特長について

(0)目次&概説 (1) データベースのインデックスとは (2) インデックスはどのような場面で使う? (3) インデックスの主要な方式  (3-1) B木  (3-2) B+木  (3-3) ビット …

バッチ処理をX秒間待たせる(停止させる)方法

<目次> (1) バッチ処理をX秒間待たせる(停止させる)方法  (1-1) 構文①  (1-2) 構文①サンプルプログラム  (1-3) 構文②  (1-4) 構文②サンプルプログラム (1) バッ …

SQL Serverで起きる「ハンドシェイクエラー」の原因について

<目次> (1) SQL Serverで起きる「ハンドシェイクエラー」の原因について  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 参考:SSPIとは? (1) SQL …

OracleデータベースとSQL Serverを冗長性の機能面での比較検討

(0)目次 (1) 冗長性の機能(Oracle)  (1-1) Oracle RAC  (1-2) Oracle Fail Safe (2) 冗長性の機能(SQL Server)  (2-1) Alw …

Windowsのバッチで日付(yyyymmdd形式)や時刻(hhmmss形式)を取得する方法

<目次> (1) Windowsのバッチで日付(yyyymmdd形式)や時刻(hhmmss形式)を取得する方法  (1-1) バッチで日付を取得する  (1-2) バッチで日付を取得する(yyyymm …

  • English (United States)
  • 日本語
Top