MS SQL Server-外键约束中WITH CHECK的值是多少



当我让SQL Server Management Studio为我生成一个表创建脚本时,外键约束与我编写它们的方式有点不同。

这里有一个:

ALTER TABLE [dbo].[GeoBytesCountries]  
WITH CHECK 
ADD CONSTRAINT [FK_GeoBytesCountries_MapReferenceId] 
FOREIGN KEY ([MapReferenceId])
REFERENCES [dbo].[GeoBytesMapReferences] ([MapReferenceId])
GO
ALTER TABLE [dbo].[GeoBytesCountries] 
CHECK CONSTRAINT [FK_GeoBytesCountries_MapReferenceId]
GO

我会在没有"WITH CHECK"和第二个"CHECK constraint"语句的情况下编写这个外键约束,并期望获得相同的功能。

当您为表编写外键约束时,有人能向我解释一下使用"WITH CHECK"和单独的"CHECK CONSTRAINT"语句的价值吗?

或者下面的代码在功能上与上面的代码完全等效?

ALTER TABLE [dbo].[GeoBytesCountries]  
ADD CONSTRAINT [FK_GeoBytesCountries_MapReferenceId] 
FOREIGN KEY ([MapReferenceId]) 
REFERENCES [dbo].[GeoBytesMapReferences] ([MapReferenceId])
GO

在我看来,假设with check部分失败,两步方法至少可以防止更多"坏"数据进入。也就是说,从那时起,您的约束将存在并应用于DML,但您可能必须对现有数据进行一些清理,使其成为受信任的约束。

最新更新