SqlServerのスクリプト実行について

このQ&Aのポイント
  • Windows2003ServerでのSqlServer2005のバッチファイルからの実行方法について質問です。
  • sql.batでscript.sqlを実行した場合、log.txtには'222'をアップデートした結果のみが出力されますが、'000'や'111'を更新した結果も出力させたいです。
  • script.sqlを3分割し、sql.batで3つのファイルを実行するしか方法はないのでしょうか?
回答を見る
  • ベストアンサー

SqlServerのスクリプト実行について

Windows2003ServerにてSqlServer2005をバッチファイルから実行する時について質問させてください。 下記の「sql.bat」にて「script.sql」を実行した場合、「log.txt」に出力される内容は'222'をアップデートした結果「(x行処理されました)」のみが出力されますが、'000'や'111'を更新した結果も出力させたい場合、「script.sql」を3分割し、「sql.bat」で3ファイル実行するしかないのでしょうか。 「sql.bat」 sqlcmd -S SERVERNAME -d SCHEMANAME -i c:\script.sql -o c:\log.txt 「script.sql」 update tablename set data1 = 'aaa' where data1 = '000' update tablename set data1 = 'bbb' where data1 = '111' update tablename set data1 = 'ccc' where data1 = '222'

質問者が選んだベストアンサー

  • ベストアンサー
  • innoya
  • ベストアンサー率71% (10/14)
回答No.1

こんにちは。 下記のように「script.sql」にあるupdate文ごとに「GO」を付けて実行すればできます。 「script.sql」 update tablename set data1 = 'aaa' where data1 = '000' GO update tablename set data1 = 'bbb' where data1 = '111' GO update tablename set data1 = 'ccc' where data1 = '222' GO

ten_oh
質問者

お礼

回答ありがとうございます。 やりたいことが実現できました。

関連するQ&A

  • sqlcmdの自動実行方法について

    sqlcmdから指定の時間に、sqlを実行したいのですが、方法がわかりません。 プロンプトを立ち上げて、 sqlcmd !!sqlcmd -E -d db -i c:\a.sql -o c:\1.txt の実行で、読み込んだsqlが1.txtに出力される事までは、確認できています。 申しわけありませんが、ご存知の方ご教示宜しくお願い致します。

  • SQL*Plusの実行結果にSQL文も残したいです

    SQL*Plusをスクリプトファイルを使って実行した際、実行SQLの出力はできないものでしょうか? 以下のようにスクリプトファイルを使ってSQL*Plusを実行し、その結果をログファイルへ 残しています。この時ログファイルには、実行結果は出力されるのですが、実行SQLは 出力されないようです。なんとかして実行SQLと、実行結果を作業ログとして残したいと 考えているのですが、何かよい方法はないものでしょうか? [ama@rh01 test]$ sqlplus scott/tiger@orcl @test01.sql > test01.log ■環境 Red Hat Linux 4 Oracle10g ■以下test01.sqlの中身です。 ---ここから-------------- create table ex01 ( c1 number, c2 varchar2(10), c3 varchar2(40) ); insert into ex01(c1,c2,c3) values(1,'AA1','BBB1'); select * from ex01; update ex01 set c2='aa1' where c1 =1; select * from ex01; exit; ---ここまで-------------- ■以下ログファイルの中身です。 ---ここから------------------ [ama@rh01 test]$ cat test01.log 省略 With the Partitioning, OLAP and Data Mining options に接続されました。                       ←ここにcreate文を出力したいです。 表が作成されました。                       ←ここにinsert文を出力したいです。 1行が作成されました。                       ←ここにselect文を出力したいです。 C1       C2   C3 ---------- ---------- ---------------------------------------- 1        AA1   BBB1                       ←ここにupdate文を出力したいです。 1行が更新されました。                       ←ここにselect文を出力したいです。 C1      C2 C3 ---------- ---------- ---------------------------------------- 1 aa1 BBB1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining optionsとの接続が切断されました。 [ama@rh01 test]$ -------------------ここまで--------------- どなたか良いアドバイスいただけたらと思います。 どうぞよろしくお願いします。

  • bat処理の実行結果ログ出力方法について

    Windows2003Serverで、bat処理でネットワーク共有したHDDにバックアップデータを移動する処理を組込しているのですが、実行される場合、されない場合があるため、実行結果をログ出力したいと思っています。 MV D:TEST.TXT Z:\TEST.TXT >>D:\LOG.TXT として出力しますと、エラーであっても、正常であっても何も出力されませんでした。 コマンドプロンプト上で返される結果(ファイルが存在しない場合、「指定されたファイルが見つかりません」の表示をする等)をログ出力する方法はないでしょうか? ご教授下さい。

  • バッチファイルを使用したsql@plusの実行及びログ出力について

    バッチファイルを使用したsql@plusの実行及びログ出力について Windows Server 2003上で動作しているOracle10gのDBに対して Windows XP上に配置したバッチファイルをタスクで起動させ、 sql@plusを使用してデータを削除する処理を行いたいと考えています。 ---data_delete.bat--- @echo %date% %time% データ削除開始 >> log.txt sqlplus -S USER/PASS@TNSNAME @data_delete.sql >> log.txt @echo %date% %time% データ削除終了 >> log.txt ---data_delete.sql--- DELETE FROM TABLE WHERE FLG = 1; EXIT; data_delete.batを実行するとlog.txtが出力されます。 ---log.txt--- yyyy/mm/dd hh:nn:ss.xx データ削除開始 XXX行が削除されました。 yyyy/mm/dd hh:nn:ss.xx データ削除終了 この時、log.txtの内容を下記のように変更したいのですが、 その方法が分りません。 ---log.txt--- yyyy/mm/dd hh:nn:ss.xx データ削除開始 yyyy/mm/dd hh:nn:ss.xx データ削除終了 XXX行が削除されました。 できれば[削除件数 XXX 件]と表示させたかったのですが、 自分の調べた限りではできそうにないので、 フィードバックされる文字列をそのまま使う方向で進めています。 上記ログの出力方法ができるようでしたら、 その方法を教えて頂けると嬉しいです。 宜しくお願いします。

  • コマンドプロンプト 複数の実行結果を変数に

    複数のテーブルのデータ件数を取得して変数に入れ、result.txtに結果を出力したいのですが、下のように書くと、1つのテーブルのデータ件数しか出力されません。複数の結果を出力するにはどうしたらよいか教えてください。 for /f %%z in ('mysql -u root -p ^< "c:\bat\test.sql"') do set count=%%z echo result: %count% >> "c:\bat\result.txt" test.sqlの中身を、 select count(*) from table1; select count(*) from table2; select count(*) from table3; とすると何も出力されず、 select count(*) from table1; とすると、1つの結果だけ出力されます。

    • ベストアンサー
    • MySQL
  • コマンドプロンプト 実行結果の桁をそろえたい

    バッチの実行結果の件数%count%を、5桁の右寄せ(結果が1桁のばあいは、スペース4桁を頭に入れてる)でテキストファイルresult.txt に出力したいのですが、下記のように書くと、 table1 : ("d\n",0) 件  と出力されてしまいます。 table1 :    0 件   と出力されるようにするにはどうしたらよいのでしょうか? for /f %%i in ('mysql -u root -p ^< "c:\bat\test.sql"') do set count=("%5d\n",%%i) echo table1 : %count% 件 >> "c:\bat\result.txt"

    • ベストアンサー
    • MySQL
  • SQLSERVER2005 sqlcmd 実行時のエラー

    「sqlcmd -S computerA\instanceB -U userC -P passD -i inputfileE -o outputfileF」 を実行した際にoutputfileFに以下のエラーメッセージが出力されていました。 「Sqlcmd: エラー: Microsoft sql native client: サーバー接続のオープン処理の遅延のため、ログイン プロセスを完了できませんでした。」 このコマンドは数ヶ月前から毎日行っているもので、今日始めて出力されました。 原因を調査しましたがわからなかったため、とりあえず同じコマンドを再実行したところ、今度は正常に動作しました。 本メッセージの出力原因を教えてください。 よろしくお願いします。

  • バッチからSQLCMDを実行する方法

    以下のようなコマンドをバッチファイル(.bat)に記載し、実行しています。(ローカルのsqlserverにwindows認証で入れる事は確認済みです。) !!sqlcmd -E -d database -i c:\sql\a.sql ですが、バッチを実行してもsqlcmdが動作せず、 「'!!sqlcmd'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」 というエラーが発生します。 バッチファイルから、sqlcmdの実行方法をご存知の方、申し訳ありませんがご教示お願いします。

  • VBスクリプトでコマンドの実行とログを作成するには

    VBスクリプトでBCPコマンドを用いてSQLServer2000のテーブルへ データをインポートしたいと考えております。 この時、同時に実行結果をログに出力したいのですが うまく実行できずに困っています。 データベース名 : ws011 テーブル名 : AAATABLE ファイル : BBBBFILE ユーザ : sa パスワード : sa とした時、次のように書いてます。 色々変数で持たせているのは、後続で使いまわすためです。 Dim baseDir,log_Dir,log_name,log Dim objRet,bcpcmd,dataDir baseDir="C:\Documents and Settings\デスクトップ\VBS\" log_Dir="log\" data_dir = "data\" log_name="result.log" log=baseDir & log_Dir & log_name dataDir = baseDir & data_dir Set objShe = CreateObject("WScript.Shell") bcpcmd = "bcp AAATABLE in " & dataDir & "BBBBFILE -S ws011 -U sa P sa -t, -k -c >> " & log Set objRet = objShe.Exec(bcpcmd) どのようにしたらコマンドも実行でき、ログも出力できるのか ご教授願います。

  • OSQLからスクリプトファイルへの引数の渡し方

    こんにちは。 OSQLからの値の渡し方について教えて下さい。 バッチファイルの中にOSQL文を使用してデータを抽出する事を考えています。 具体的には、バッチファイルを実行時に日付を入力し、 入力された日付をOSQL文の中に記述しているスクリプトファイルへ値を渡し、 スクリプトファイルにあるSQL文を実行するというやり方です。 **バッチファイル** set /p %hiduke = "日付を入力して下さい。yyyymmdd -->" osql -S インスタンス -U ユーザ名 -P パスワード -d DB名 -i c:\script.sql > C:\結果.txt **スクリプトファイル(script.sqlファイル)** declare @hiduke char(8) set @hiduke = バッチから渡された値を指定 select * from uriage where 日付 = @hiduke という風な感じで考えています。 バッチからOSQLへの渡し方と、OSQLからスクリプトファイルへの渡し方、 その他、良い案があれば教えて頂けないでしょうか。 よろしくお願いします。