生成的SQL中的奇怪约束

生成的SQL中的奇怪约束,sql,modeling,Sql,Modeling,注:这个问题与视觉范式无关。任何知道SQL的人都可以回答这个问题 我使用可视化范例在我们的项目中使用ER图对数据库进行建模。当VisualParadigm为数据库生成SQL等价物,并且我将其导入MSSQL时,它工作得非常好 我查看了生成的SQL代码,以确保一切正常,并看到了一些奇怪的东西!: 对于tblContracts,我定义了一个名为EndAfterStart的约束,以确保endDate的值始终大于startDate。为该约束生成的SQL代码如下: IF NOT EXISTS (SELECT

注:这个问题与视觉范式无关。任何知道SQL的人都可以回答这个问题

我使用可视化范例在我们的项目中使用ER图对数据库进行建模。当VisualParadigm为数据库生成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
问题是:

为什么tblContracts更改两次以添加此约束?! 前两行还不够吗? 第二行和第四行有什么不同?
第二行将约束添加到表中;第四行启用约束。

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

@Constantin-你说得对。但是当我省略第四行时,创建的表也启用了约束。在生成的SQL中,约束似乎是显式启用的,不管它是否已启用。我猜脚本的设计适合于创建约束以及恢复数据库模式。出于某种原因,作者不愿意在else条款中加第四行。