SQL Server无法删除外键:执行ALTER TABLE语句报Msg 156语法错误
解决SQL Server删除外键时的语法错误问题
哦,这个坑我踩过!你收到的Msg 156错误,核心原因是SQL Server删除外键的语法和你写的不一样——它不支持直接用DROP FOREIGN KEY,得用DROP CONSTRAINT来指定外键约束的名称。
为什么出错?
DROP FOREIGN KEY是MySQL等数据库的语法,但在SQL Server里,所有类型的约束(外键、主键、唯一约束等)都需要通过DROP CONSTRAINT来删除,而不是单独的DROP FOREIGN KEY关键字,所以SQL Server会识别不了你语句里的FOREIGN,抛出语法错误。
正确的删除语句
把你的语句改成下面这样就可以正常执行了:
ALTER TABLE dbo.[User] DROP CONSTRAINT FK_User_UserTypeID;
额外小技巧(怕记错外键名?)
如果你不确定表上的外键准确名称,可以用这个查询来查看dbo.[User]表上所有的外键:
SELECT name AS ForeignKeyName FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID('dbo.[User]');
执行后就能拿到所有外键的名称,直接复制用就行,避免拼写错误。
内容的提问来源于stack exchange,提问作者Moeez
相关产品推荐
相关产品推荐

