埋め込みSQLのUPDATE及びDELETE文の処理件数の取得
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
mysticage
投稿数: 77
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
埋め込みSQLにてUPDATEやDELETE処理をした場合に、
その処理した件数を画面などに表示するに当り、その件数を
取得したいと思っています。
今は、処理するSQLのWHERE句をそのまま別タスクのSELECT COUNT(*) として、最初に件数を取得した後に、UPDATEやDELETEの処理をしています。
DELETE、UPDATE用のタスクとSELECT COUNT(*)用のタスクと2つ作成しますが、同じ事を2回書くのはプログラムのバグのもとにもなりかねませんので、何とかDELETE、UPDATE用のタスクの中で処理した件数が取得できないかと思っています。
DELETE、UPDATE処理した時の処理件数はどのように取得できますか?よろしくお願いします。
その処理した件数を画面などに表示するに当り、その件数を
取得したいと思っています。
今は、処理するSQLのWHERE句をそのまま別タスクのSELECT COUNT(*) として、最初に件数を取得した後に、UPDATEやDELETEの処理をしています。
DELETE、UPDATE用のタスクとSELECT COUNT(*)用のタスクと2つ作成しますが、同じ事を2回書くのはプログラムのバグのもとにもなりかねませんので、何とかDELETE、UPDATE用のタスクの中で処理した件数が取得できないかと思っています。
DELETE、UPDATE処理した時の処理件数はどのように取得できますか?よろしくお願いします。
投票数:0
平均点:0.00
pu_mahalo
居住地: 大阪
投稿数: 775
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
こんにちは Puです
通常の言語系でしたら SQLを実行した後
roucountで処理した件数が取得できるのですが
Magicでは試してみてません(試せばわかるのですが^^;)
delete from Hogehoge
where 列1 = xxx
sql@@rowcount
でわ〜でわ〜
通常の言語系でしたら SQLを実行した後
roucountで処理した件数が取得できるのですが
Magicでは試してみてません(試せばわかるのですが^^;)
delete from Hogehoge
where 列1 = xxx
sql@@rowcount
でわ〜でわ〜
投票数:0
平均点:0.00
mysticage
投稿数: 77
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
Puさん、返信ありがとうございます。
UPDATEなど、出力パラメータを設定しましたらエラーになってしまいました。
また、何か方法がありましたらお願いします。
UPDATEなど、出力パラメータを設定しましたらエラーになってしまいました。
また、何か方法がありましたらお願いします。
投票数:0
平均点:0.00
Kurogane
投稿数: 50
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
V9で試したところ、select文以外がある状況で出力パラメータを
設定するとこけちゃいますね。
うちでは、件数保持用のテーブルを作成して、@@rowcountを保持
させています。
設定するとこけちゃいますね。
うちでは、件数保持用のテーブルを作成して、@@rowcountを保持
させています。
投票数:1
平均点:10.00
mysticage
投稿数: 77
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
Kuroganeさん、調査及び返信ありがとうございます。
V10でも、UPDATEなど、出力パラメータを設定しましたらエラーになってしまいました。
@@ROWCOUNTですが、MAGIC内で、UPDATEやDELETEの処理をしたタスクが終了した直後に別タスクで、
SELECT @@ROWCOUNT
とし、出力パラメータに数値の変数を設定しましたが、
実際処理件数に関係なく、全て[1]で戻ってきます。
何かやりかたが間違っているのでしょうか?
また、件数保持用のテーブルを作成して、@@ROWCOUNTを保持しているということですが、どのタイミングで、どこで、保持しているのでしょうか?差し支えがなければ教えて頂けないでしょうか。
V10でも、UPDATEなど、出力パラメータを設定しましたらエラーになってしまいました。
@@ROWCOUNTですが、MAGIC内で、UPDATEやDELETEの処理をしたタスクが終了した直後に別タスクで、
SELECT @@ROWCOUNT
とし、出力パラメータに数値の変数を設定しましたが、
実際処理件数に関係なく、全て[1]で戻ってきます。
何かやりかたが間違っているのでしょうか?
また、件数保持用のテーブルを作成して、@@ROWCOUNTを保持しているということですが、どのタイミングで、どこで、保持しているのでしょうか?差し支えがなければ教えて頂けないでしょうか。
投票数:0
平均点:0.00
Kurogane
投稿数: 50
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
更新対象テーブルをA(column_2を絞り込んでcolumn_1を更新)
件数保持用テーブルをB(count_columnに件数を保持)として、
declare @count int
update A
set column_1 = 10
where column_2 = 1
select @count = @@rowcount
insert into B
(count_column)
values(@count)
変数なしに直接@@rowcountをinsert文に利用できるかも
知れませんが、念のために変数を仲介してます。
@@rowcountは直前のステートメントの件数を取得できる
システム変数ですが、MAGIC上のタスクを分けてしまうと
MAGIC自身がいたるところでSQL文を発行しているので取得
はできないかと思われます。
なので更新→件数取得は同じ埋め込みSQL内で実現させて
下さい。
件数保持用テーブルをB(count_columnに件数を保持)として、
declare @count int
update A
set column_1 = 10
where column_2 = 1
select @count = @@rowcount
insert into B
(count_column)
values(@count)
変数なしに直接@@rowcountをinsert文に利用できるかも
知れませんが、念のために変数を仲介してます。
@@rowcountは直前のステートメントの件数を取得できる
システム変数ですが、MAGIC上のタスクを分けてしまうと
MAGIC自身がいたるところでSQL文を発行しているので取得
はできないかと思われます。
なので更新→件数取得は同じ埋め込みSQL内で実現させて
下さい。
投票数:1
平均点:10.00
mysticage
投稿数: 77
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
Kuroganeさん、返答ありがとうございます。
埋め込みSQLに複数のSQL文など記載できることは知りませんでした。ストアドプロシージャ的な記載ができるということですね。参考になりました。
ありがとうございました。
埋め込みSQLに複数のSQL文など記載できることは知りませんでした。ストアドプロシージャ的な記載ができるということですね。参考になりました。
ありがとうございました。
投票数:0
平均点:0.00