生成的SQL中的奇怪约束条件

问题描述:

说明:此问题与Visual Paradigm无关。任何知道SQL的人都可以回答。生成的SQL中的奇怪约束条件


我正在使用Visual Paradigm在我们的项目中建模数据库(使用ER图)。当Visual Paradigm为数据库生成SQL等效项时,我将它导入到MSSQL中,效果很好。

我把在生成的SQL代码来看看,以确保任何事情都是正确的,我看到了一些奇怪的事情!:

对于tblContracts我定义了一个名为EndAfterStart确保的endDate值总是比startDate更大的约束。这个约束生成的SQL代码是在这里:

IF NOT EXISTS (SELECT * FROM sys.check_constraints WHERE object_id=OBJECT_ID(N'[dbo].[EndAfterStart]')) 
ALTER TABLE [dbo].[tblContracts] WITH CHECK ADD CONSTRAINT [EndAfterStart] CHECK (([startDate]<=[endDate])) 
GO 
ALTER TABLE [dbo].[tblContracts] CHECK CONSTRAINT [EndAfterStart] 
GO 

而且问题:

  1. 为什么tblContracts被改变两次,添加此约束?
  2. 是不是前两行不够?
  3. 第二行和第四行有什么不同?

如果第一行和第二行不存在,则第一行和第二行会创建EndAfterStart约束。第四行启用EndAfterStart约束。

+0

@Constantin - 你说得对。但是当我省略第四行时,创建的表格也启用了约束。 似乎在生成的SQL中,约束是显式启用的,尽管它已经启用或不启用。 – Isaac 2010-01-07 13:20:01

+0

我想脚本被设计为适合于创建约束以及“重建数据库模式”。由于某些原因,作者宁愿不把第4行放在'else'子句中。 – Constantin 2010-01-09 23:20:57

第二行将约束添加到表中;第四行启用约束。