Я уверен, что это возможно, но для жизни я не могу понять это.
То, что я создал, представляет собой таблицу MSSQL истории пользователей для хранения изменений, внесенных пользователем и кем. Эта таблица содержит два внешних ключа, которые ссылаются на мою другую таблицу (Пользовательскую) — один fkey для затронутого пользователя, а другой fkey для пользователя, вносящего изменения.
Мне нужно, чтобы любые изменения в таблице (User) каскадировались и обновляли соответствующие записи в этой новой таблице.
Поля в новой таблице (User_History) следующие (каждый пользователь идентифицируется двумя полями):
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.*
Код работает, если я удалю второй «НА КАСКАД ОБНОВЛЕНИЯ», однако это будет означать, что значения в полях «Modified_By_User_House_Id» и «Modified_By_User_Id» не будут обновлены, чтобы соответствовать их ссылочным значениям в таблице пользователей.
Я в растерянности относительно того, как достичь этой цели.
ON DELETE NO ACTIONко второму ограничению? - person Kermit   schedule 10.09.2012