如果我想像这样删除我的数据库中的所有表,它会处理外键约束吗?如果没有,我该如何处理?
GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
DROP TABLE dbo.[Student]
Run Code Online (Sandbox Code Playgroud) sql-server constraints foreign-keys drop-table database-table
我试图编写用于删除约束的脚本.
我有以下函数来选择我的DataBase中的Constarints
SELECT name
FROM sys.foreign_keys
Run Code Online (Sandbox Code Playgroud)
我使用上面的脚本编写了alter scripts
SELECT
'ALTER TABLE ' + OBJECT_NAME(parent_object_id) +
' DROP CONSTRAINT ' + name
FROM sys.foreign_keys
Run Code Online (Sandbox Code Playgroud)
使用上面的查询我如何执行这些约束?
我可以用DROP DATABASE DBName.但我只是试图通过删除约束来删除表.
是不是可以不去SP?或者我可以采取哪些简单方法?
在oracle中,我可以发出DROP TABLE ...级联约束,它不会抱怨FK等.
在T-SQL中是否有等价物?
我有一个新表,该表具有对许多现有表的外键引用。首次创建新表时,我通过以下方式创建外键:
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])
Run Code Online (Sandbox Code Playgroud)
上面的方法将使用它自己的自动命名约定为外键约束生成名称。
但是,我想删除新表,因为我需要通过从头开始创建表来进行一些重大修改。
显然,如果我仅执行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'
Run Code Online (Sandbox Code Playgroud)
上面给出的结果基本上显示了我需要运行的alter语句。
我需要更自动化的东西。为什么我必须分别删除每个外键约束,然后才能删除表?
我想以一种更简单的方式删除表格。它比我上面要做的要容易。
constraints ×2
foreign-keys ×2
sql-server ×2
t-sql ×2
cascade ×1
drop-table ×1
sql ×1
sql-drop ×1