生成的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
而且问题:
- 为什么
tblContracts
被改变两次,添加此约束? - 是不是前两行不够?
- 第二行和第四行有什么不同?
答
如果第一行和第二行不存在,则第一行和第二行会创建EndAfterStart
约束。第四行启用EndAfterStart
约束。
答
第二行将约束添加到表中;第四行启用约束。
@Constantin - 你说得对。但是当我省略第四行时,创建的表格也启用了约束。 似乎在生成的SQL中,约束是显式启用的,尽管它已经启用或不启用。 – Isaac 2010-01-07 13:20:01
我想脚本被设计为适合于创建约束以及“重建数据库模式”。由于某些原因,作者宁愿不把第4行放在'else'子句中。 – Constantin 2010-01-09 23:20:57