ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:SqlServerのスクリプト実行について) SqlServerのスクリプト実行について 2013/12/06 10:25 この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' 質問の原文を閉じる 質問の原文を表示する みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー innoya ベストアンサー率71% (10/14) 2013/12/06 17:07 回答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 質問者 お礼 2013/12/10 10:52 回答ありがとうございます。 やりたいことが実現できました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピューターデータベースSQL Server 関連する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 として出力しますと、エラーであっても、正常であっても何も出力されませんでした。 コマンドプロンプト上で返される結果(ファイルが存在しない場合、「指定されたファイルが見つかりません」の表示をする等)をログ出力する方法はないでしょうか? ご教授下さい。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム バッチファイルを使用した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つの結果だけ出力されます。 コマンドプロンプト 実行結果の桁をそろえたい バッチの実行結果の件数%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" 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からスクリプトファイルへの渡し方、 その他、良い案があれば教えて頂けないでしょうか。 よろしくお願いします。 SQLをバッチで実行 掲題の件で少し教えていただきたいことがあります。 バッチファイルでSQLPLUSを起動し、 @XXXXXXXXX.SQL >> XXX.log(バッチのログ)と 実行するのですが、このSQL文がインサート文や アップデート文など通常のSQL文だと バッチでのリダイレクションの結果に XX行作成されました。とかXX行更新されましたとか 出力されると思うのですが、 実行するSQL文の中でさらに、 @XXXXXXXXX.SQL と記述していると どのようにログファイルに出力されますか? XX行作成されました。とかXX行更新されましたとか が出るとうれしいのですが… わかりにくい質問かもしれませんがお願いいたします。 バッチでのSQL実行結果の分岐処理について。 バッチでのSQL実行結果の分岐処理について。 お世話になっております。 バッチからsqlを実行してその結果によってそれ以降のバッチ全体の処理を停止させる方法を考えています。 手がかりがつかめずまったく先に進めないためアドバイスをいただけますでしょうか。 バッチの内容(start_del.bat) -------------------------------------------------------- osql -i.\del.sql -o c:\wk\log.txt -S gold -E osql -i.\create.sql -o c:\wk\log.txt -S gold -E ------------------------------------------------------------ SQLの内容(del.sql) ------------------------------------------------------------ BEGIN TRANSACTION; DELETE FROM LDDB.dbo.test WHERE b='0'; IF @@ERROR = 0 <--エラー判定にこのコマンドを使おうと考えました BEGIN *********************** END ELSE BEGIN ********************** END COMMIT TRANSACTION; ------------------------------------------------------------ 処理の概要: 1.バッチで最初にdel.sqlを実行します。 2.del.sqlの実行が失敗すれば、2つ目のバッチであるcreate.sqlは実行ささずに、バッチを終了させます。 *ポイントはdel.sqlの結果というのは、バッチからdel.sqlを実行できたかではなく、del.sqlの実行結果を判断するという点です。 教えていただきたいこと ・del.sqlの実行後、制御がバッチに戻ったときに、結果を確認してバッチを継続させるか終了させるかを判断させる方法はどのような仕組みを作ればいいのでしょうか。 Windows2003サーバーで、SQLServerは2005です。 初心者のためよく分かっていないことが多すぎで申し訳ありませんが、アドバイスをいただけますでしょうか。 よろしくお願いいたします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム rshを使うスクリプトをバックグラウンド実行 Linux+Perlでのお話です。 内部でsystem関数を使ってrshコマンドを実行しているperlスクリプト(以下、スクリプトAという)があります。 スクリプトAをフォアグラウンドで実行するとうまく流れるのですが、バックグラウンド実行すると、rshコマンドを実行した直後でjobが止まってしまいます。 もっと詳しく言いますと、スクリプトAのrshコマンドは、ディスクを共有しているリモートマシンに対して、スクリプトBを実行するように指示しています。 スクリプトBではとある計算を行なっており、その計算結果をファイルに出力しています。 そして、その結果をスクリプトAで読み込んで後処理を行うというものです。 ----- …(前処理)… system("rsh (ホスト名) \"(スクリプトB実行コマンド及び引数) 1> /dev/null 2> /dev/null\""); # ここでjobが止まってしまいます。 # ここで標準出力(ログファイルにリダイレクトしてる)に何か出力しようとしても、何も出力されてません。 (スクリプトBの結果ファイルの読み込み) …(後処理)… ----- Jobが止まってしまうと言っているのは、jobsコマンドで見ると"job stopped"となっている状態のことを言っています。 この状態でスクリプトBの結果はファイルに出力されているので、rshのコマンドはうまく投げられていると思います。 (「rshやsshは標準入力が期待されてるとバックグラウンド実行が出来ない」(?)というような記述をどこかで見かけたので、念のためrshに"< /dev/null"の記述を加えてもみたのですが、変わりませんでした) その後、止まっているjobをfgコマンドでフォアグラウンドで再開させると、最後まで問題なく実行されます。 フォアグラウンドで実行すればうまくいくのに、バックグラウンドで実行すると止まってしまうのが理解出来ません。 これは何が原因なのでしょうか。 そして、どうしたら解決出来るのか。 どなたかご存知でしたら、ご教示頂きたくお願い致します。 シェルでSQLの結果を取得したい シェルスクリプトでSQLPLUSから、SQL文を実行させる事はできたのですが、そのSQLがSELECT文の時、その抽出した結果をシェルスクリプト上 、知りたいとき、どのようにすればわかりません。 SELECT した結果は必ず0個または1個です。 どなたかご教授ください。 sqlplus -S user/pass @${SQL_FILE} << EOF >log.txt EOF SQL_FILEの中身 select seq from A_table where ID = 1 oo4o。executeSQLにてupdate実行後、実行件数取得は? 今まであまり使ったことの無かったAccess97のVBAを使用しています。単純な質問なんですが、教えてください。 oo4oにてオラクルDBに接続し、executeSQLメソッドにより単純なupdate処理を実行しました。 -----(細かいところは省略) sql= "update TABLE_A set CODE='AAA' where NAME='HOGE'" OraDB.ExecuteSQL sql ----- このExecuteSQLメソッドの、実行結果が0件なのか、1件なのかを知りたいのですが、方法はありますでしょうか?つまり、直前のSQLの実行結果を取得するメソッドはありますか?という質問です。Javaとかなら、戻り値として実行結果の件数が帰ってきますよね。この場合はそれをどうやって取ればいいのでしょうか? where NAME='HOGE'に当てはまるレコードが無くても、0件の処理が成功として、エラーは出ないんですよねぇ・・・ もし不足の情報がありましたら、補足いたします。 よろしくお願いします。 SQLSERVER上でUPDATE文を実行するときに? SQLSERVERでUPDATE文を実行しようとしています。 UPDATE A SET CharName = (LEFT(B.UserName, 20)) FROM A, B WHERE A.USER_CD = B.UserID これを実行しようとしているのですが、STRING、バイナリーは切り詰められました。というエラーがでます・・・。 こういう使い方はできないのでしょうか? UPDATEを同時に実行する UPDATE文について質問なんですが、 下記のクエリのように条件の違うものを一度に実行させるということは可能なのでしょうか? UPDATE テーブル名 SET No = '2' WHERE No = '3' ・・・(1) UPDATE テーブル名 SET No = '3' WHERE No = '2' ・・・(2) (1)を実行し(2)を実行すると、期待通りの結果がどうしても得られません。 どなたかわかる方がいらっしゃれば、よろしくお願いしますm(__)m Oracle SQL実行時間について Oracle初心者です。 あるテーブル(レコード数:100万件程度)に対してSelectするSQLの実行時間を、Oracleのset timing on, set autotrace onlyで計測しました。 結果は1000ms程度だったのですが、 同じSQL文を実行するプログラム(java)を作成し、pstmt.executequery()してresultsetからデータをgetするまでの時間をログに出力させたところ、400ms程度でした。 プログラムの性能目標として、set timing on の値を設定していたため、実際の結果(javaプログラムが出力した処理時間)の評価に困っています。 差がでる原因をご教示いただけませんでしょうか。 宜しくお願いします。 Updateの複数テーブル条件時のLIMIT実行 すみません、MySQLのSQL文で教えてください。 以下のSQL文を実行すると UPDATE overflag c, asinprice d SET d.priceCheckUS = TRUE WHERE c.asin=d.asin AND c.priceOverUS=0 LIMIT 1; ERROR 1221 (HY000): Incorrect usage of UPDATE and LIMIT というエラーが出力されます。 UPDATE asinprice d SET d.priceCheckUS = TRUE WHERE d.asin='111' OR d.asin='000' LIMIT 1; は実行できました。 複数テーブルだと実行できないように理解しましたが、何が問題か教えてください。 よろしくお願いします。 SSISにて変数を使用したSQL実行タスクの更新結果について はじめまして。 現在、SSISを使用して開発を行っています。 そこで、変数を使用したSQL実行タスクを構築したのですが、 ご存知の方はご回答願います。 処理内容としては、batプログラムにてdtexecでvalueというパラメータに0.7と渡します。 その後、SQL実行タスクのSQLstatementにて「UPDATE sample SET flag = '1' WHERE a <= ?」というように、 aの値がvalue以下だったら、フラグを更新するようなSQLをくみました。 実行し、確認をしたのですが、SSISを構築した端末で処理を行うと正しく更新されるのですが、 ビルドしたdtsxをサーバー上等、他の端末で実行すると、a=0.7のデータに対してフラグが更新されません。 ProtectionLevel値には、DontSaveSensitiveをセットしてあります。 何かご存知の方は、ご教示願います。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター データベース SQL ServerOraclePostgreSQLMySQLNoSQLその他(データベース) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
回答ありがとうございます。 やりたいことが実現できました。