レコード削除時のトリガについて

このQ&Aのポイント
  • レコードの削除時にトリガを使用して、処理履歴を履歴テーブルに記録したいです。
  • 登録時と更新時は処理端末を取得するため、正しく記録できますが、削除時は削除前の処理端末が記録されてしまいます。
  • 現在はトリガを無効にして、ストアド内で処理端末を取得して履歴に追加していますが、トリガもしくはSQL側で削除時の処理端末を取得する方法はありますか?
回答を見る
  • ベストアンサー

削除時のトリガについて

レコードの更新時にトリガで処理履歴を履歴テーブルにとりたいのですが、 元のレコードに処理端末「Environ("COMPUTERNAME")」で取得している)と言う 項目があるので、登録時と訂正時は inserted を使うので処理履歴に どのPCで処理したか記録が残るのですが、削除時は deleted を使うと 削除されたデータの記録になるので、削除の前に処理したPCになってしまいます。 実際に削除したPC名にしたいので・・・ 現在は削除時のトリガを無効にして、元のレコードを削除するストアドに 処理端末を渡してそのストアドで履歴に追加しているのですが、 トリガ(もしくはSQL側)で呼び出したPC名は把握できないものでしょうか?

  • SEsyo
  • お礼率78% (64/82)

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

Accessであれば直接SQL Serverにつなぎますし、都度セッションが確立されるので、以下の方法で呼び出した端末が特定できるはずです。 SELECT host_name FROM sys.dm_exec_sessions WHERE session_id=@@SPID

SEsyo
質問者

お礼

うまくいきました、ありがとうございました。

関連するQ&A

  • トリガ実行時のエラー (ADP + MSDE2000)

    ADP + MSDE2000 環境にて、あるテーブルに下記のトリガを設定しました。 CREATE TRIGGER トリガ名 ON テーブル1 FOR DELETE  AS  BEGIN   DECLARE @変数 varchar(32)   SELECT @変数 = 列1 FROM deleted   DELETE FROM テーブル2   WHERE テーブル2.列1 = @変数  END 意図するところは、別のテーブル (テーブル2) からの同一キー (列1) を持つレコードの連動削除です。 このトリガを仕込んだテーブルに対してADPのGUI (テーブルのデータシートビュー) より手動にて直接 レコード削除を試みると、 「キー列の情報が足りないか、正しくありません。更新の影響を受ける行が多すぎます。」 のエラーが発生します。 (データシートビューを一度閉じた後、再度開くと、意図したレコードは消えています) GUIを使用せず、DELETE文で削除した場合、このエラーは出ず、動作結果も意図通りなのですが、前述の エラーは無視してよいものでしょうか? トリガの記述で問題点、改善すべき箇所があれば、ご指摘頂けると幸いです。 尚、このテーブルには、この他に3つのトリガが記述されています。 (できれば1本にまとめたいのですが、力量不足 + 時間不足です) 字数制限の関係で、書けませんが、他のトリガとの兼ね合いで問題が生ずることはあり得るのでしょうか? コメントをお待ちしております。

  • 【2005】トリガエラー時の呼び出し元のコミット

    はじめまして。 現在、SQLServer2005を利用したアプリケーションのメンテナンスを行っています。 今回、あるテーブルに変更があった際に、その内容を他テーブルに登録するという内容のプログラムを作成しています。 本来であれば、アプリケーション側にてそのテーブルに対する変更時に、併せてもう一つのテーブルに内容を書き込めばいいのですが、現状のアプリケーションが全体の仕様書がなく、該当テーブルに変更を行う部分を全て洗い出すことが難しい状況となっています。 そのためにトリガにて処理を行おうと考えています。 ここで、質問です。 トリガ内でエラーが発生した時、通常であれば呼び出し元のクエリまでロールバックされてしまいますが、トリガでの処理のみロールバックを行い、呼び出し元の処理はコミットしたいと考えています。 トリガ内にて例外をcatchして、その部分でraiserrorを発行しなければ 可能かと思い、そういう実装を行ったのですが、やはり呼び出し元のクエリまでロールバックされてしまいます。 トリガでの処理のみロールバックし、呼び出し元のクエリはコミットするような方法をご存知でしたらご教示ください。 よろしくお願いします。

  • レコード削除時に(サブ)フォームに表示される"#Deleted"について

    アクセス97についての質問なのですが。 フォームのレコードソースにテーブルのデータを割り当て、そのデータをテーブル上(VBA等を使って)で削除するとフォームには"#Deleted"っていう文字が表示されてしまいます。これが厄介で"shift+f9"を押さないと更新ができません。 メニューバーにある"レコードの削除"ボタンによる削除なら問題はないのですが…… 会社の他の部署の人にあまりパソコンに詳しい人がいないので、できたら自分の作ったフォーム内で全ての処理が簡単にできるようにしたいと考えています(間違ったことをやらせないためにも)。 できましたら、VBAによる更新の仕方を教えてください。 あるいは、メニューバーをコマンドボタンに割り当てる方法でもかまいません。 よろしくお願いいたします。

  • VisualBasic6.0 SP3 (←注) Access97 で作成したプログラムでこんな問題が!?

    WindowsNT SP5 VisualBasic6.0 SP3 Access97 で作成したプログラムがあります。 Access97のMDB上にAテーブルとBテーブルがあるとします。 VB上で Aテーブルのデータを Bテーブルに 書き込むという処理をしています。 書き込む時に既にBテーブルに存在していた場合は、 そのレコードを削除して追加しています。 データを削除するという行為をしているのは、 その部分だけです。 今、どのような現象が起こっているかというと、 ACCESS97のMDBのテーブルのあるレコード (ここでいう削除されるレコードが) の全ての項目が #Deleted   となってしまっているのです。 テーブルを開いたまま、削除クエリーを流した 時などに表示されるようなあの画面です。 しかし、テーブルを開きなおしても、 #Deleted のままなんです。 MDBを開きなおしても、#Deletedの行が消えるわけでも なく、そのまま残っています。 MDB自体が破損してしまっているようなのです。 修復を試みると、#Deletedの行は消えるのですが、 消えるだけです。 消えて、本来追加されるべきレコードがあればいいのですが、その部分だけが消えてしまうのです。 一体、いつのタイミングで #Deleted の行レコード が作られるのか全く分かりません。 可能性がありそうなのは、そこの削除しているところ だけなのですが、そこで必ず起こるというわけでも ないようです。 サービスパックを最新にすれば治るとかいう手法は できるだけ、とりたくないです。すでに納品されている 状態なので。 どなたか、似た現象に出会ったことがある方、 問題点、解決策、なんでもよいので手がかりでも 教えていただけないでしょうか? とても困っています。 よろしくお願い致します。

  • 削除したのにごみ箱に入ってない、こんな時・・・

    Windows2000を使用しています。 ファイルを削除しました。 普通、ごみ箱に入ります。 SHIFT+DELETE などもしていません。 普通の削除です。 但し、自分の端末ではなくて、 ネットワークでつないだ別の端末のファイルを 消したのです。 こういう時って、どうやっても復元は不可能 なのでしょうか? ネットワークでつながれたPCにも もちろん、つないでいるこっちのPCのごみ箱にも 形跡がありません。 どのような方法で削除されるのでしょう? なにかしら欠片みたいなものは残らないのでしょうか? 復元ソフトを使っても無理でしょうか? どなたか宜しくお願いします。 2台ともwindows2000 です。

  • #Deletedのレコードがいじれない

    VBAのADOで rs("内容") と取得しようとしたら ある特定のレコードで ------------------------ 実行時エラー -2147217885 レコードは削除されています。 ------------------------ となるので該当のレコードを見てみたら 内容のフィールドが #Deleted になっていました。 しかしほかのフィールドは問題ないです。 この内容フィールドだけ削除した記憶もないのですが どうしてこうなってるのでしょうか? エラーになる際にはVBAを中断し 該当のレコードを見ているので その「#Deleted」と言う文字を消そうとすると ------------------------------------------------ フィールド '内容'が他のユーザーによって更新されたため、 変更を保存できません。 ------------------------------------------------ となります。 なのでVBAを一度停止、同じように「#Deleted」と言う文字を消そうとしても 同じエラーになります。 なのでアクセスもエクセルもすべて閉じ、 ファイル名.laccdb も閉じた状態で、再度該当のファイルを開き同じように「#Deleted」と言う文字を消そうとしても 同じエラーになります。 どうしてこのレコードはいじれないのでしょうか? アクセス2010、win8.1です。

  • Accessでのレコードの削除時の表示について

    いつもお世話になります。基本的なことかもしれませんがAccess初心者でよくわからないので 教えて下さい。 Access2010でテーブルからレコードを読み出すフォームを作成し、そのレコードを削除するため、 フォーム上に削除ボタンを設定しました。 削除ボタンをクリックすると小さなウインドウが開き下記のようなメッセージが表示されます。           1件のレコードを削除します。     「はい」をクリックすると、削除したレコードを元に戻すことはできません           「はい(Y)]   「いいえ(N)] メッセージのウインドウの下には読みだしたレコードのフォームが表示されていますが、 キーとなる顧客コード(数字6桁)の欄には #エラー と表示され、その他の項目はすべて ブランクになります。 「はい」をクリックするとレコードは削除されるので処理的には問題ないのですが、 削除する前に確認するためフォーム上の項目を表示したまま残したいです。 どのようにすればよいでしょうか? 削除ボタンのクリック時の埋め込みマクロの内容は以下のように設定しています。  エラー時         移動先 次         マクロ名  コントロールの移動     コントロール名 = [Screen].[PreviousControl].[Name]  マクロエラーのクリア   If not [Form].[Newrecord] Then     メニューコマンドの実行           コマンド レコードの削除 If文の最後   If [Form].[Newrecord] And Not [Form].[Dirty] Then 警告文 If文の最後   If [Form].[Newrecord] And [Form].[Dirty] Then     メニューコマンドの実行           コマンド レコードを元に戻す If文の最後   If [MacroError] <> 0 Then メッセージボックス           メッセージ = [MacroError].[Description] 警告音 はい        メッセージの種類 なし      メッセージのタイトル If文の最後  ウインドウを閉じる   オブジェクトを閉じる    オブジェクトの種類      オブジェクト名    オブジェクトの保存 確認 参考にしたAccessのプログラムから削除ボタンをコピーしたため、これが適しているかどうか わかりません。 よろしくお願いします。   

  • amazon fire HDの視聴履歴削除について

    amazon fire HDの端末でプライムビデオを視聴し、 その後視聴履歴を削除する方法を教えてください。 PCでは プライムビデオ→設定→視聴履歴で 削除できますが、 fire HDだと プライムビデオ→マイアイテム→設定の 画面に行くと検索履歴をクリアという項目は ありますが、視聴履歴の削除という項目は ありません。 fire HDの端末上からプライムビデオの 視聴履歴の削除方法をご存じの方が いらしたら教えてください。

  • ストアドでのレコード処理

    ストアドの中でSELECT文を発行してその出力結果を元に次のSQL文を作成したいと思っています。そこでSQL文の出力結果をACCESSから呼んだ時の様にRECORD SETの処理の様な記述をしたいと思っています。そこでストアドの中で『SELECT [項目] from XXXX』の [項目]を参照するにはどの様な記述をすればいいのでしょうか。宜しくお願い致します。

  • 切り取りと削除の違い

    「いつまでも初心者」です、カテ先が判りませんでしたが質問です。 (1)ファイルを消す時にいつも「削除」とするのですが、「切り取り」との違いはどの様な事でしょうか。 (2)PCとは何かを保存(HDや他のメディア等)した後に、その記録を削除してもなにかしらの履歴等が蓄積されていつかは一杯になり、動かなくなると聞きましたがそうなんでしょうか。 いつも疑問に思いながら使っていて気になり、お聞きしたく思っていますので何方かどうか宜しくご指導の程を御願いします。