我正在研究SQL Server2008的AdventureWorks示例数据库,我在他们的创建脚本中看到他们倾向于使用以下内容:
ALTER TABLE [Production].[ProductCostHistory] WITH CHECK ADD
CONSTRAINT [FK_ProductCostHistory_Product_ProductID] FOREIGN KEY([ProductID])
REFERENCES [Production].[Product] ([ProductID])
GO
紧接着是:
ALTER TABLE [Production].[ProductCostHistory] CHECK CONSTRAINT
[FK_ProductCostHistory_Product_ProductID]
GO
我在外键(如这里)、唯一约束和常规CHECK
约束中看到了这一点;DEFAULT
约束使用我更熟悉的常规格式,例如:
ALTER TABLE [Production].[ProductCostHistory] ADD CONSTRAINT
[DF_ProductCostHistory_ModifiedDate] DEFAULT (getdate()) FOR [ModifiedDate]
GO
第一种方法和第二种方法之间有什么区别吗?
发布于 2009-02-09 22:21:48
第一个语法是冗余的- WITH CHECK
是新约束的默认语法,并且默认情况下约束也是打开的。
此语法是由SQL management studio在生成sql脚本时生成的--我假设它是某种额外的冗余,可能是为了确保即使表的默认约束行为发生更改,也会启用约束。
https://stackoverflow.com/questions/529941
复制相似问题