【问题标题】:Deleting a foreign key and column in SQL Server在 SQL Server 中删除外键和列
【发布时间】:2017-08-30 14:55:07
【问题描述】:

我有一个表,当我从 SQL Server Management Studio 创建定义时,我得到了这个

CREATE TABLE [dbo].[Settings]
(
    [SettingsID] [int] NOT NULL,    
    [Contact1] [uniqueidentifier] NULL,

    CONSTRAINT [PK_Settings] 
        PRIMARY KEY CLUSTERED ([SettingsID] ASC)
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Settings] WITH CHECK 
    ADD FOREIGN KEY([Contact1])
    REFERENCES [dbo].[User] ([UserSID])
GO

我正在尝试删除 Contact1 列并删除外键

当我尝试直接删除该列时,我得到了这个

ALTER TABLE Settings
    DROP COLUMN Contact1

错误:

对象“FK__GlobalSet_72E607DB”依赖于列“Contact1”。
消息 4922,第 16 级,状态 9,第 24 行
ALTER TABLE DROP COLUMN Contact1 失败,因为一个或多个对象访问此列。

当我尝试先删除外键时

ALTER TABLE Settings
   DROP CONSTRAINT Contact1

错误:

消息 3728,第 16 层,状态 1,第 24 行
“Contact1”不是约束。
消息 3727,第 16 级,状态 0,第 24 行
无法删除约束。查看以前的错误。

谁能告诉我如何删除现有表中的外键列。

谢谢

【问题讨论】:

  • FK__GlobalSet_72E607DB 是约束的名称,而不是 Contact1
  • 是的,我注意到了,但不确定它是如何生成的。这是否总是相同的名称。
  • stackoverflow.com/questions/45945900/… 发现这个可以解决问题,但仍然不确定该名称是如何生成的。
  • 自动,由 SQL Server,因为您在生成外键时没有命名约束。 ALTER TABLE Settings ADD CONSTRAINT FK_Settings_Contact1_User_UserSID FOREIGN KEY(Contact1) REFERENCES [User](UserSID) 将是完整的形式。是的,这样做是一个真的好主意,因为必须在运行时获取名称是一件很痛苦的事情。
  • 没有。 constraint 没有名字,column 有。 (一列可以有多个外键约束,所以不能有像Contact1 这样的简单名称。)that 语句的显式形式是ALTER TABLE Settings ADD Contact1 UNIQUEIDENTIFIER, CONSTRAINT FK_Settings_Contact1_User_UserSID FOREIGN KEY(Contact1) REFERENCES dbo.[User](UserSID)

标签: sql sql-server sql-server-2008


【解决方案1】:

删除约束“FK__GlobalSet_72E607DB”

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多