私はこれが可能であると確信していますが、私の人生ではそれを理解することはできません.
私が作成したのは、ユーザーと誰によって行われた変更を保持するためのユーザー履歴 MSSQL テーブルです。このテーブルには、他のテーブル (ユーザー) を参照する 2 つの外部キーが含まれています。
私が必要とするのは、(User) テーブルへの変更が、この新しいテーブルの対応するエントリをカスケードして更新することです。
新しいテーブル (User_History) のフィールドは次のとおりです (各ユーザーは 2 つのフィールドで識別されます)。
Affected_User_House_Id - int
Affected_User_Id - int
Modified_By_User_House_Id - int
Modified_By_User_Id – int
Modification_Date - datetime
ModificationMade - ntext
「ModificationMade」以外の各フィールドは主キーです。フィールド「Modification_Date」の精度は 1 秒までです。私が抱えている問題は、上記のカスケードを作成することです。次の T-SQL コードを実行してみました。
ALTER TABLE [User_History] WITH CHECK
ADD CONSTRAINT [FK_User_History_User] FOREIGN KEY([Affected_User_House_Id], [Affected_User_Id])
REFERENCES [User] ([User_House_Id], [User_ID])
ON UPDATE CASCADE
GO
ALTER TABLE [User_History] CHECK CONSTRAINT [FK_User_History_User]
GO
ALTER TABLE [User_History] WITH CHECK
ADD CONSTRAINT [FK_User_History_User_ModifiedBy] FOREIGN KEY([Modified_By_User_House_Id], [Modified_By_User_Id])
REFERENCES [User] ([User_House_Id], [User_ID])
ON UPDATE CASCADE
GO
ALTER TABLE [User_History] CHECK CONSTRAINT [FK_User_History_User_ModifiedBy]
GO
この T-SQL により、次のエラーが発生しました。
*'User' table saved successfully
'User_History' table
- Unable to create relationship 'FK_User_History_User_ModifiedBy'.
Introducing FOREIGN KEY constraint 'FK_User_History_User_ModifiedBy' on table 'User_History' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.*
2 番目の「ON UPDATE CASCADE」を削除すると、コードは機能しますが、フィールド「Modified_By_User_House_Id」および「Modified_By_User_Id」の値は、User テーブルで参照されている値と一致するように更新されません。
どうすればこの目標を達成できるか途方に暮れています。