Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQLServer外键检查已禁用,但仍可以';t形升降台_Sql Server_Database - Fatal编程技术网

Sql server SQLServer外键检查已禁用,但仍可以';t形升降台

Sql server SQLServer外键检查已禁用,但仍可以';t形升降台,sql-server,database,Sql Server,Database,我有一个SQLServer数据库,我想从中删除一个表。该表具有FK约束,但在本例中这并不重要,因为当我重新填充该表时,FK将被正确替换 我已经完成了EXEC sp\u msforeachtable“ALTER TABLE?NOCHECK CONSTRAINT all”,它给出了一条消息:sp\u msforeachtable“ALTER TABLE?NOCHECK CONSTRAINT all”succeed,但是当我试图删除我的表时,我得到以下SQL错误:SQL错误:无法删除对象“myTabl

我有一个SQLServer数据库,我想从中删除一个表。该表具有FK约束,但在本例中这并不重要,因为当我重新填充该表时,FK将被正确替换

我已经完成了
EXEC sp\u msforeachtable“ALTER TABLE?NOCHECK CONSTRAINT all”
,它给出了一条消息:
sp\u msforeachtable“ALTER TABLE?NOCHECK CONSTRAINT all”succeed
,但是当我试图删除我的表时,我得到以下SQL错误:
SQL错误:无法删除对象“myTable”,因为ti被外键约束引用

该命令是否应该不会影响我的整个数据库并允许我在没有问题的情况下删除表?我还尝试过执行EXEC sp_msforeachtable“ALTER TABLE myTable NOCHECK CONSTRAINT all”
,这会导致相同的错误

该命令是否应该不会影响我的整个数据库并允许我 没有问题就把桌子放下

不,不管NOCHECK状态是什么;如果存在引用目标表的FK约束,则无法删除该目标表

删除该表的唯一方法是首先删除引用该表的FK约束

该命令是否应该不会影响我的整个数据库并允许我 没有问题就把桌子放下

不,不管NOCHECK状态是什么;如果存在引用目标表的FK约束,则无法删除该目标表


删除该表的唯一方法是首先删除引用该表的FK约束。

NOCheck禁用这些约束,以便它们不会被强制执行。这将允许您在不违反约束的情况下删除数据

删除该表将使约束定义无效。不能有引用不存在的表的约束。当约束存在时,您也无法从表中删除引用的列

如果要重新填充表,只需删除表数据并重新加载即可。如果您必须删除并重新创建表,那么还需要为外键约束包含drop&create语句


请注意,如果禁用该约束,则需要启用using WITH CHECK(是两次)。第一个检查打开新数据的约束,第二个检查告诉SQL验证现有数据。如果只执行一项操作,则将检查新数据,但现有数据将不被“信任”,这可能会影响SQL在查询中利用FK引用的方式。

n检查禁用约束,以便不强制执行约束。这将允许您在不违反约束的情况下删除数据

删除该表将使约束定义无效。不能有引用不存在的表的约束。当约束存在时,您也无法从表中删除引用的列

如果要重新填充表,只需删除表数据并重新加载即可。如果您必须删除并重新创建表,那么还需要为外键约束包含drop&create语句


请注意,如果禁用该约束,则需要启用using WITH CHECK(是两次)。第一个检查打开新数据的约束,第二个检查告诉SQL验证现有数据。如果只执行一项操作,将检查新数据,但现有数据将不被“信任”,这可能会影响SQL在查询中利用FK引用的方式。

如果要重新创建表,为什么要尝试删除该表?该表中充满了我运行的程序中的元数据。为了解决元数据的问题,已经做了一些更改,最好是从头开始做。不需要删除表。只需删除现有数据并重新填充。如果只是要重新创建表,为什么要尝试删除它?表中充满了我运行的程序中的元数据。为了解决元数据的问题,已经做了一些更改,最好是从头开始做。不需要删除表。只需删除现有数据并重新填充。在这种情况下,如果约束已被检查,则禁用检查的意义何在?我运行的命令的实际用例是什么?我更习惯于使用MySQL,在MySQL中,等效的命令将允许我删除带有FK约束的表。禁用检查的唯一一点是允许您将数据插入带有FK的表中,否则由于该约束将不允许插入这些数据。在这种情况下,禁用检查的意义是什么,是否仍要检查约束?我运行的命令的实际用例是什么?我更习惯于使用MySQL,在MySQL中,等效的命令将允许我删除带有FK约束的表。禁用检查的唯一一点是允许您将数据插入带有FK的表中,否则由于该约束将不允许插入这些数据。感谢您的深入解释+1包括实现我期望结果的替代方法。我已经对表执行了一个删除查询,现在它似乎正在按预期工作,尽管它运行了一段时间!Delete是一个完全记录的事务,并且总是比truncate花费更长的时间。不幸的是,Truncate被认为是DDL,不能与FK约束一起使用。感谢您的深入解释+1包括实现我期望结果的替代方法。我已经对表执行了一个删除查询,现在它似乎正在按预期工作,尽管它运行了一段时间!Delete是一个完全记录的事务,并且总是比truncate花费更长的时间。不幸的是,Truncate被认为是DDL,不能与FK约束一起使用。