当我让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,但您可能必须对现有数据进行一些清理,使其成为受信任的约束。