【发布时间】:2023-03-12 08:35:02
【问题描述】:
我有一个名为 [Content] 的 SQL 表,其中包含以下列:
- ID PrimaryKey,唯一标识符,不为空
- 文件唯一标识符,不为空
- FileHighResolutionID 唯一标识符,不为空
- FileHighResolutionProID 唯一标识符,不为空
- FileVectorID 唯一标识符,不为空
- ThumbnailID 唯一标识符,不为空
第一列值是自动生成的。 其余五列值引用名为 [File]
的表的 ID 列当我从 [Content] 中删除一行时,我还想删除 [File].[ID] 中 [File] 中的行 匹配 [Content].[File]、[Content].[HighResolutionID] 等中的值。
由于这与多个列相关联,级联删除是否有效?如果有,语法是什么。
我能想到的最好的:
ALTER TABLE [dbo].[File]
ADD CONSTRAINT fk_content_file
FOREIGN KEY (FileID)
REFERENCES [dbo].[File] (ID)
ON DELETE CASCADE;
ALTER TABLE [dbo].[File]
ADD CONSTRAINT fk_content_filehighresolution
FOREIGN KEY (FileHighResolutionID)
REFERENCES [dbo].[File] (ID)
ON DELETE CASCADE;
ALTER TABLE [dbo].[File]
ADD CONSTRAINT fk_content_highresolutionpro
FOREIGN KEY (FileHighResolutionProID)
REFERENCES [dbo].[File] (ID)
ON DELETE CASCADE;
ALTER TABLE [dbo].[File]
ADD CONSTRAINT fk_content_vector
FOREIGN KEY (FileVectorID)
REFERENCES [dbo].[File] (ID)
ON DELETE CASCADE;
ALTER TABLE [dbo].[File]
ADD CONSTRAINT fk_content_thumbnail
FOREIGN KEY (ThumbnailID)
REFERENCES [dbo].[File] (ID)
ON DELETE CASCADE;
...但我不确定这是否正确。我宁愿更确切地知道,也不愿丢失迄今为止已填充到应用程序中的数据。
【问题讨论】:
-
FWIW,我使用存储过程来处理这类事情。它让我更难做一些非常愚蠢的事情并让它通过数据愉快地级联,它允许验证额外的标准,用户可以被授予对 SP 的访问权限而无需访问基础表,SP 可以进行额外的日志记录,. .. .
标签: sql-server tsql sql-server-2014