Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 2005 添加外键时不检查现有数据会产生什么影响?_Sql Server 2005_Foreign Keys - Fatal编程技术网

Sql server 2005 添加外键时不检查现有数据会产生什么影响?

Sql server 2005 添加外键时不检查现有数据会产生什么影响?,sql-server-2005,foreign-keys,Sql Server 2005,Foreign Keys,我继承了一个数据库,它并不完全追求数据完整性。我试图添加一些外键来改变这一点,但有些表中的数据不符合约束条件。最有可能的是,这些数据不会被再次使用,因此我想知道如果将其留在那里,我可能会面临哪些问题。我看到的另一个选择是将其移动到某种没有引用约束的表中,只是出于历史目的 那么,不检查现有数据的后果是什么 如果我在一个表上创建一个外键约束,并且不检查现有数据,那么插入到表中的所有新数据都将被强制执行吗 编辑: 我实际上是说在创建外键时使用WITH NOCHECK选项。如果外键约束会被现有数据破坏,

我继承了一个数据库,它并不完全追求数据完整性。我试图添加一些外键来改变这一点,但有些表中的数据不符合约束条件。最有可能的是,这些数据不会被再次使用,因此我想知道如果将其留在那里,我可能会面临哪些问题。我看到的另一个选择是将其移动到某种没有引用约束的表中,只是出于历史目的

那么,不检查现有数据的后果是什么

如果我在一个表上创建一个外键约束,并且不检查现有数据,那么插入到表中的所有新数据都将被强制执行吗

编辑:
我实际上是说在创建外键时使用WITH NOCHECK选项。

如果外键约束会被现有数据破坏,那么它将无法创建。系统将为您检查。您应该做的是创建要在外键中使用的列,通过填充此列,将每一行指向现有记录(它甚至可以是一个由旧数据或转换数据链接到的单个“虚拟”记录),然后创建FK。

如果现有数据违反了外键约束,则该外键约束将无法创建。系统将为您检查。您应该做的是创建要在外键中使用的列,通过填充此列,将每一行指向现有记录(它甚至可以是一个由旧数据或转换数据链接到的单个“虚拟”记录),然后创建FK。

如我所见,如果您这样做的话,您的情况不会比不处理它更糟,因为坏数据仍然会在您的数据库中—如果这些数据不受更改的影响的话。 它将从该点开始检查数据。因此,您在确保未来数据正确方面处于领先地位


但是,如果坏记录中的任何数据可能发生更改,则会出现问题,因为FK检查将失败,因此不允许更改。如果是这种情况,并且您无法清理坏数据,那么最好通过将数据与基本上命名为“未知”的父记录关联来尽可能地修复数据。因此,如果父表是customer,并且由于与详细信息记录关联的客户在未检查FK记录的情况下被删除,因此您无法再分辨该客户是谁,那么请插入客户名称为“未知”的客户记录,并将客户ID更改为该记录的ID

在我看来,如果你这样做了,你的境况不会比你不去管它更糟,因为坏数据仍然会存在于你的数据库中——如果这些数据不会被更改的话。 它将从该点开始检查数据。因此,您在确保未来数据正确方面处于领先地位


但是,如果坏记录中的任何数据可能发生更改,则会出现问题,因为FK检查将失败,因此不允许更改。如果是这种情况,并且您无法清理坏数据,那么最好通过将数据与基本上命名为“未知”的父记录关联来尽可能地修复数据。因此,如果父表是customer,并且由于与详细信息记录关联的客户在未检查FK记录的情况下被删除,因此您无法再分辨该客户是谁,那么请插入客户名称为“未知”的客户记录,并将客户ID更改为该记录的ID

他说的是使用NOCHECK,当现有记录不符合条件时,它可以让你创建FK。他说的是使用NOCHECK,当现有记录不符合条件时,它可以让你创建FK。太棒了。我希望我至少可以限制未来的数据。我必须看看我对旧数据能做些什么,只是添加一个“未知”标识符对我来说可能不是很好。你可以考虑在FK字段中去掉值。FKs可以具有空值。我希望我至少可以限制未来的数据。我必须看看我对旧数据能做些什么,只是添加一个“未知”标识符对我来说可能不是很好。你可以考虑在FK字段中去掉值。FK可以有空值