首页 > 解决方案 > 如何在 SQL Server 中无约束地删除外键?

问题描述

我已经引用了我NotificaionSourceId的帮助表 ID,但我需要删除它,因为我不再想引用这两列,但我不确定如何删除引用,所以如果我能得到任何帮助或建议将是真的赞赏。

ALTER TABLE [dbo].[Notification] WITH CHECK 
    ADD FOREIGN KEY([NotificationSourceId])
        REFERENCES [dbo].[Help]([Id])

我看到很多人这样做

ALTER TABLE [dbo].[company] 
    DROP CONSTRAINT [Company_CountryID_FK]

但我没有 FK 键,所以我迷路了。

标签: sqlsql-server

解决方案


使用下面的查询来查找您的 FK 名称:

SELECT
    FK_Table = FK.TABLE_NAME,
    FK_Column = CU.COLUMN_NAME,
    PK_Table = PK.TABLE_NAME,
    PK_Column = PT.COLUMN_NAME,
    Constraint_Name = C.CONSTRAINT_NAME
FROM
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
    ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
    ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
    ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
            SELECT
                i1.TABLE_NAME,
                i2.COLUMN_NAME
            FROM
                INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
                ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
            WHERE
                i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
           ) PT
    ON PT.TABLE_NAME = PK.TABLE_NAME

然后使用:

ALTER TABLE [dbo].[company] DROP CONSTRAINT [Constraint_Name]

推荐阅读