【发布时间】:2020-06-07 22:02:05
【问题描述】:
我有 2 个表格,“TableA”和“TableB”设置如下。
表 A
+----------+------+----------------+ |流ID |姓名 |其他栏目 | +----------+------+----------------+表 B
+----+--------------+------------+---- --------+ |身份证 |文件流ID |附加文件流ID |添加日期 | +----+--------------+------------+---- --------+表 A 中的 FileStreamID 和 AdditionalFileStreamID 都是表 B 中 StreamID 列的外键约束。我尝试在两列上设置约束,以便在删除表 A 中的行时,两列都设置为 NULL ,但是出现“多级联路径”异常(以下类似问题):
2 foreign key to the same table may cause cycles or multiple cascade paths
相反,我尝试创建以下触发器来处理它:
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".
有人知道为什么会这样吗?
【问题讨论】:
-
那个错误不是来自那个触发器。这表明您还有其他触发器,或者您没有向我们展示的其他 SQL。
-
-
这有点清楚了。我会看一下表格,看看我是否能找到解决方案。感谢您的指导!
-
我想我找到了问题所在。我的 TableA 是一个 SQL 文件表,有一个名为“file_type”的列。这是一个带有计算文本“(getfileextension([name]))”的计算列。
-
看起来文件表不支持“INSTEAD OF”触发器。我可能不得不找到一种不同的方式来实现这一点。干杯! docs.microsoft.com/en-us/sql/relational-databases/blob/…
标签: sql-server tsql database-trigger