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