テーブルのデータの変更の記録を保持しようとしています。私はこれを行うさまざまな方法がありますが、より便利に聞こえるが、私の状況で私はトリガを使用してこの機能を実装したいと思います。フィールドの更新でSQLがトリガーされ、別のテーブルに新しいレコードが挿入される
CREATE TABLE Applications
(
Application_ID INT NOT NULL,
Student_ID INT NOT NULL,
Job_ID INT NOT NULL,
ApplicationChange_TYPE VARCHAR(64) NOT NULL,
PRIMARY KEY (Application_ID),
FOREIGN KEY (Student_ID) REFERENCES Students(Student_ID),
FOREIGN KEY (Job_ID) REFERENCES Jobs(Job_ID),
CONSTRAINT CK_TYPE CHECK (ApplicationChange_TYPE in ('Submitted', 'Withdrawn', 'Invited For Interview', 'Invited to Assessment Centre', 'Rejected', 'Accepted'))
);
そして:私は2つのテーブル持って
CREATE TABLE ApplicationChanges
(
ApplicationChange_ID INT NOT NULL,
Application_ID INT NOT NULL,
ApplicationChange_TYPE VARCHAR(64),
ApplicationChange_DATETIME DATE NOT NULL,
PRIMARY KEY (ApplicationChange_ID),
FOREIGN KEY (Application_ID) REFERENCES Applications(Application_ID),
CONSTRAINT CK_APPTYPE CHECK (ApplicationChange_TYPE in ('Submitted', 'Withdrawn', 'Invited For Interview', 'Invited to Assessment Centre', 'Rejected', 'Accepted'))
);
私はアプリケーションのテーブル内のレコードのApplicationChange_TYPEフィールドが更新/編集時れるようにトリガを作成したいと思いますが、新しいレコードがありますApplicationChangesテーブルに作成されます。 Application_IDとApplicationChange_TYPEをApplicationテーブルの編集済みレコードからApplicationChanges内の新しいレコードに持ち越す必要があります。 ApplicationChange_DATETIMEフィールドには、現在の日付が入力されます。
は、現在では、両方のテーブルの主キーは、新規レコードの作成時に自動ID番号にシーケンスとトリガを使用しています。
入力があれば幸いです!そして私がすべて不明であったならば、謝罪します。
EDIT:
また、私はすでにこの時の試みを行っているが、私はそれのようにわからないことだし、それは私がそれを含めての任意のポイントがあったとは思いませんでしたように壊れているようです。しかし、ここにある:
CREATE OR REPLACE TRIGGER ApplicationsUpdateTrigger
AFTER UPDATE ON Applications
BEGIN
INSERT ApplicationChanges (Application_ID, ApplicationStatus_TYPE, ApplicationChange_TYPE)
SELECT Application_ID, ApplicationStatus_TYPE FROM Applications
JOIN inserted ON inserted.Application_ID = Applications.Application_ID
INSERT INTO ApplicationChanges (Application_ID, ApplicationStatus_TYPE, ApplicationChange_DATETIME)
VALUES (NULL, Application_ID, ApplicationStatus_TYPE, GETDATE())
END;
/
互換性のないデータベースタグを削除しました。実際に使用しているデータベースにタグを付けてください。 –
なぜ「シーケンスと列のデフォルト」の代わりに「シーケンスとトリガ」ですか? –
質問者がSQL Server/TSQLを使用しているので、これらのタグをロールバックしたという質問には何もありません。 –