none
System.Data.DataRowの加工方法

    質問

  • お世話になります。
    invoke-sqlcmdでインデックスの再編成を実行し、
    SQLserver上で出力されたメッセージ、例えば「正常に処理されました」をpowershellプロンプト上に出力させたいのですが、

    $Query=$ALTER INDEX indexA ON tableA REORGANIZE; select@@error as mess
    invoke-sqlcmd -serverInstance servename -username username -passwrod pass -Database dbname -query $query -outputsqlErrors $true;
    と実行すると「System.Data.DataRow」で出力されます。単純なSELECT文でも同様でしたが、
    以下DBCCコマンドで
    $Query=DBCC CHECKDB(DBname); select @@error as mess
    この場合だと問題無く処理開始から終了まで処理内容が表示されました。
    System.Data.DataRowが表示される場合の加工方法が分からず、お手数ですがお教え頂きたく存じます。
    なお付随してもしご存知でしたらお教えいただきたいのですが、invoke-sqlcmdを発行した後、
    対象DBのDB名を変更しようとすると排他が掛かっている様で応答無しとなり変更が出来ません。
    接続を切ると変更できるのですが、invoke-sqlcmdを発行した後は別途別コマンドでセッションを切る必要があるのでしょうか。
    よろしくお願いします。




    2018年6月19日 22:09

すべての返信

  • DataRowクラスはデータベースエンジンが返したデータの1行分に対応するデータ型です。インデックスアクセスを行うと各カラムの情報が得られます。PowerShellにおいても [0] で1行1列目の値が取得できます。

    なお、@@ERRORを取得されているようですがこれはドキュメントにもあるように 整数 (integer) 、つまりエラーコードが得られるだけです。質問文には「メッセージ~を~出力させたい」とのことですが、これでは期待する結果を得ることができません。

    そもそもInvoke-SqlCmd自身にエラー内容を出力する-OutputSqlErrors $trueオプションや-Verboseオプションがあります。こちらは試されたでしょうか?

    2018年6月20日 1:26