У меня есть 2 таблицы, настройки «TableA» и «TableB», как показано ниже.
Таблица A
+----------+------+---------------+
| StreamID | Name | Other Columns |
+----------+------+---------------+
Таблица B
+----+--------------+------------------------+-----------+
| ID | FileStreamID | AdditionalFileStreamID | DateAdded |
+----+--------------+------------------------+-----------+
И FileStreamID, и AdditionalFileStreamID в таблице A являются ограничениями внешнего ключа для столбца StreamID в таблице B. Я попытался установить ограничение для обоих столбцов, чтобы при удалении строки в таблице A для обоих столбцов установлено значение NULL, однако получено исключение «несколько каскадных путей» (аналогичная проблема ниже):
2 внешний ключ к одной и той же таблице может вызвать циклы или несколько каскадных путей
Вместо этого я попытался создать следующий триггер для его обработки:
CREATE TRIGGER dbo.File_Deletion_Trigger
ON dbo.TableA
INSTEAD OF DELETE
AS BEGIN
UPDATE dbo.TableB
SET FileStreamID = NULL
WHERE FileStreamID IN (SELECT d.StreamID FROM deleted d)
UPDATE dbo.TableB
SET ScheduleStreamID = NULL
WHERE AdditionalFileStreamID IN (SELECT d.StreamID FROM deleted d)
DELETE FROM dbo.TableA
WHERE StreamID IN (SELECT d.StreamID FROM deleted d)
END
GO
При попытке создать триггер я получаю следующее исключение:
Msg 195, Level 15, State 10, Procedure TableA, Line 1 [Batch Start Line 0]
'getfileextension' is not a recognized built-in function name.
Msg 474, Level 16, State 0, Procedure File_Deletion_Trigger, Line 6 [Batch Start Line 0]
Unable to load the computed column definitions for table "deleted".
Кто-нибудь знаете, почему это может происходить?