无法删除表中没有任何外键约束的行

时间:2016-05-20 14:48:24

标签: sql sql-server

我正在尝试从SQL Server 2008中的表中删除既没有外键约束也没有任何触发器的行。当我检查消息部分时,它显示受影响的行,但是当我检查表时,行仍然存在。附图是供参考的图像。我非常确定这张桌子没有任何限制。可能是什么问题?

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用sys表来查询constrints,keys等。根据这些结果,您可以从表中删除。请参阅下面的示例查询,该查询返回表约束。

    SELECT 
    TableName = t.Name,
    ColumnName = c.Name,
    dc.type,
    dc.type_desc,
    dc.name,
    dc.definition
FROM sys.tables t
INNER JOIN sys.default_constraints dc ON t.object_id = dc.parent_object_id
INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND c.column_id = dc.parent_column_id
where t.name = 'yourtablename'
ORDER BY t.Name

答案 1 :(得分:0)

如果您正在删除的表上确实没有触发器,则检查所有具有FK的链接表到您要删除的表(反过来,所有FK到那些表)。 FK将设置ON DELETE CASCADE以便删除实际工作(而不是抛出错误),只有任何这些FK承载表中的触发器可以立即重新添加行。

您可能不一定会看到所有这些潜在触发器操作的rows affected消息,因为触发器可以在执行任何DML之前设置SET NOCOUNT ON ...