gpt4 book ai didi

sql - 是否有更简单、更快的方法来删除具有对其他表的外键引用的表?

转载 作者:行者123 更新时间:2023-12-02 23:05:18 26 4
gpt4 key购买 nike

我有一个新表,其中包含对许多现有表的外键引用。当我第一次创建新表时,我通过以下方式创建了外键:

ALTER TABLE [dbo].[NewTable] WITH CHECK ADD FOREIGN KEY([SectionDatabaseID])
REFERENCES [dbo].[Section] ([SectionDatabaseID])

ALTER TABLE [dbo].[NewTable] WITH CHECK ADD FOREIGN KEY([TermDatabaseID])
REFERENCES [dbo].[Term] ([TermDatabaseID])

上述方法将使用其自己的自动命名约定生成外键约束的名称。

但是,我想删除新表,因为我需要从头开始创建它来进行一些重大修改。

显然,如果我只执行一个 drop 语句,SQL Server 数据库会提示说新表具有对其他表的外键引用。

我听说运行以下脚本来找出存在哪些外键,以便我们可以删除它们:

use perls;
SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME +
'] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']'
FROM information_schema.table_constraints
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' and TABLE_NAME = 'NewTable'

上面的结果基本上显示了我需要运行的更改语句。

我需要更自动化的东西。为什么我必须分别删除每个外键约束,然后只能删除表?

我想以更简单的方式删除表格。它一定比我上面需要做的更容易。

最佳答案

关系数据库旨在强制数据库完整性。您的陈述可能会破坏为保护数据质量而精心添加的约束。自动从生产数据库中删除完整性约束对于公司来说可能是一场灾难。因此,当 SQL 语言被开发出来时,能够轻松地删除被其他表引用的表对于重要任务的优先级并不高。该产品具有用于企业数据的数据库引擎,更多的是为 DBA 设计的,而不是为普通用户设计的。

想要删除外键中引用的多个表的原因是什么?您能确定您不会破坏其他人的查询吗?

假设您正在非关键系统上工作,那么您编写脚本来编写删除脚本的方法大约是我所知道的最佳解决方案。

关于sql - 是否有更简单、更快的方法来删除具有对其他表的外键引用的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com