首页 > 解决方案 > 删除约束和表

问题描述

我创建了名为 Dates 的表,还从其他表中插入了值。你可以看看下面的代码行

--Create table
CREATE TABLE [dimension].[Dates](
     [Year] [int] NOT NULL,
     [Month] [tinyint] NOT NULL,
     [MonthName] [varchar](10) NOT NULL,
     [Quarter] [tinyint] NOT NULL,
     [MMYYYY] [char](6) NOT NULL
 CONSTRAINT [PK_Dates] PRIMARY KEY CLUSTERED (MMYYYY ASC))

--Insert data
INSERT INTO  [dimension].[Dates] ([Year],[Month],[MonthName],[MonthName], [MMYYYY])
    SELECT DISTINCT [Year],[Month],[MonthName]0,[MonthName], [MMYYYY]
    FROM [dimension].[Date]

另外,我用这行代码在 FACT.FactTable 上分配外键和该表的主键。

ALTER TABLE FACT.FactTable
ADD 
FOREIGN KEY (MMYYYY) REFERENCES [DIMENSION].[Dates] (MMYYYY)

到现在为止还挺好。但知道我想删除此表并再次使用其他列。为了做到这一点,我在下面使用这个命令但不能工作。

ALTER TABLE DIMENSION.Dates
DROP CONSTRAINT [PK_Dates]

Msg 3725, Level 16, State 0, Line 183
The constraint 'PK_Dates' is being referenced by table 'FactTable', foreign key constraint 'FK__FactTable__MMYYY__33F4B129'.
Msg 3727, Level 16, State 0, Line 183
Could not drop constraint. See previous errors.

因为这条线对我不起作用,我可以使用命令 drop table 来删除这个表,所以有人可以帮我解决这个问题吗?

标签: sql-server

解决方案


DROP如果有其他表引用了您的表,则您无法使用dimension.Dates表,或者在其他情况下,DELETE如果有其他表的数据引用了 table 中的数据,则您无法获取数据FACT.FactTable。您应该先删除CONSTRAINT然后删除表。

ALTER TABLE FACT.FactTable DROP CONSTRAINT FK__FactTable__MMYYY__33F4B129;

一旦约束被删除并且您没有任何其他引用,dimention.Dates您可以执行以下语句:

DROP TABLE dimension.Dates;

推荐阅读