質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

3回答

7662閲覧

【PowerShell】SQLCMD実行時のLASTEXITCODEに対する種類分け

reraNine

総合スコア124

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2019/02/20 01:45

編集2019/02/20 06:48

お世話になっております。
現在PowerShellから
sqlファイルに定義されているSELECT文からTSVファイルを出力するpgを作成中です。

PowerShell

1$DBSERVER = "aaaa" 2$DB = "bbbb" 3$ID = "xxxx" 4$PASSWORD = "yyyy" 5$SQLFILE = "C:xxx\yyy\zzz.sql" 6$TSV = "C:aaa\bbb\ccc\ddd.tsv" 7SQLCMD -S $DBSERVER -U $ID -P $PASSWORD -d $DB -i $SQLFILE -s `"`t`" -W -h -1 -u -o $TSV 8$errorNo = $LASTEXITCODE 9switch($errorNo) { 10 0{'''成功したとログを書き込む''' break;} 11 1{'''失敗したとログを書き込む''' break;} 12}

SQLCMDで数パターンわざとエラーを起こしてみたのですが、
現状0の正常終了か1の異常終了しか確認できておりません。
例えば、
・指定したSQLファイルが存在しない。
・実装後、DBの列定義が変わってSQLが使い物にならなくなった
・実装後、PASSWORDが変わった(ハードコードが原因ですが、、)
・DBに何かしら障害が発生しておりログインができなかった
上記やその他エラーとなる可能性があると思うのですが、
(その他エラーでこういう可能性考慮してる?といったご指摘もお待ちしております!)
このケースを種別分けしてエラー発生時に原因をより詳細に把握したいと考えております。

少々検索して調べはしたものの理解ができず、、
①そもそもSQLCMDはLASTEXITCODEで0か1以外を返すのか
②SQLファイルでエラー番号を指定して返す実装にするのか、そもそもできるのか。

まとめとして、
「PowerShellのSQLCMDで実行した際のLASTEXITCODEで0,1以外の数値を定義して出す方法が無いか」が
わかりません。ご教授をお願いできればと思います。
何卒よろしくお願い致します。

■関連質問
https://teratail.com/questions/175456?modal=q-comp

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

LASTEXITCODEはTrue/Falseなので、Sqlcmdを詳細に扱いたいなら、Invoke-Sqlcmd コマンドレットを利用された方が良いでしょう。

【PowerShell】【SQL Server】SQLの結果を条件にイベントログに書き込む

投稿2019/02/20 02:13

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reraNine

2019/02/20 06:34

ご回答ありがとうございます。 Invole-Sqlcmdの存在を初めて知りました。。。 現在、SqlCmdから移行を実施し、別途エラーメッセージの表示方法について質問を新規作成する予定です。 回答依頼を送信させていただきますので、よろしければ、再度お願いできればと思います。
reraNine

2019/02/20 07:07

追記:相互フォローでないと回答依頼を投げれないとの事でした。。質問文に追記させていただきました。
guest

0

エラーメッセージの中に HResult としてエラーコードが入っていると思います。それを取り出したらいいのではないでしょうか。

投稿2019/02/20 02:04

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reraNine

2019/02/20 06:34

ご回答ありがとうございます。 エラーコードの変数取得方法について後程質問を新規作成し、 回答依頼を送信させていただければと思います。
reraNine

2019/02/20 07:07

追記:相互フォローでないと回答依頼を投げれないとの事でした。。質問文に追記させていただきました。
guest

0

PowerShellのSQLCMDで実行した際のLASTEXITCODEで0,1以外の数値を定義して出す方法が無いか

ありません。エラーのしきい値は-Vで変えることはできますが、「指定レベル以上のエラーが起きれば1」「起きなければ0」というのは作り付けです(MSDN)。

投稿2019/02/20 01:55

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reraNine

2019/02/20 06:34

ご回答ありがとうございます。 オプション一覧に記載がありましたか...見落としておりました。
reraNine

2019/02/20 07:17

追記:今回の修正にて別途疑問が発生した為、新規質問を作成させていただきました。 当質問の■関連質問にてURLを記載させていただきましたので、 もしよろしければご参照いただければと思います。 何卒よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問