Sql server 添加约束时不确定WITH CHECK子句
我正在尝试添加检查约束 首先是我Sql server 添加约束时不确定WITH CHECK子句,sql-server,tsql,check-constraints,Sql Server,Tsql,Check Constraints,我正在尝试添加检查约束 首先是我 ALTER TABLE [Production].[Products] WITH CHECK ADD CONSTRAINT [CHK_Products_unitprice] CHECK (([unitprice]>=(0))) GO 它与消息一起失败 味精547,第16级,状态0,第1行 ALTER TABLE语句与CHECK约束“CHK_Products_unitprice”冲突。冲突发生在数据库“TSQL2012”表“Production.P
ALTER TABLE [Production].[Products] WITH CHECK
ADD CONSTRAINT [CHK_Products_unitprice] CHECK (([unitprice]>=(0)))
GO
它与消息一起失败
味精547,第16级,状态0,第1行ALTER TABLE语句与CHECK约束“CHK_Products_unitprice”冲突。冲突发生在数据库“TSQL2012”表“Production.Products”列“unitprice”中 然后,我尝试在没有“WITH CHECK”选项的情况下添加约束,但仍然会出现上述错误
那么“with check”选项的意义是什么呢?创建新检查约束的默认选项是
with check
选项,该选项将读取和计算现有值,如果发现冲突,则会导致ALTER
失败
如果需要部署忽略现有错误值的检查约束,并且您了解其缺点(请参见下文),则可以将与NOCHECK
选项一起使用,这是启用以前禁用的约束时的默认设置
详情请参阅:
有支票|无支票
指定是否对表中的数据进行验证
新添加或重新启用的外键或检查约束。如果不是
指定,对于新约束假定为带检查,而不带检查
假定为重新启用的约束
如果不想验证新的检查或外键约束
针对现有数据,与NOCHECK一起使用。我们不建议这样做
除了极少数情况外,这是一个例外。新约束将在中求值
所有后续数据更新。任何被抑制的约束冲突
在添加约束时使用NOCHECK可能会导致将来的更新
如果它们使用不符合
约束
查询优化器不考虑定义的约束 没有检查。在重新启用这些约束之前,将忽略这些约束 通过使用ALTERTABLE TABLE和CHECK约束ALL
创建新检查约束的默认选项是
WITH check
选项,该选项将读取和计算现有值,如果发现冲突,则会导致ALTER
失败
如果需要部署忽略现有错误值的检查约束,并且您了解其缺点(请参见下文),则可以将与NOCHECK
选项一起使用,这是启用以前禁用的约束时的默认设置
详情请参阅:
有支票|无支票
指定是否对表中的数据进行验证
新添加或重新启用的外键或检查约束。如果不是
指定,对于新约束假定为带检查,而不带检查
假定为重新启用的约束
如果不想验证新的检查或外键约束
针对现有数据,与NOCHECK一起使用。我们不建议这样做
除了极少数情况外,这是一个例外。新约束将在中求值
所有后续数据更新。任何被抑制的约束冲突
在添加约束时使用NOCHECK可能会导致将来的更新
如果它们使用不符合
约束
查询优化器不考虑定义的约束 没有检查。在重新启用这些约束之前,将忽略这些约束 通过使用ALTERTABLE TABLE和CHECK约束ALL
您有一个冲突:即,一个不满足约束条件的值:Pure和Simple。我看不到有效的问题。很抱歉,我认为使用“With check”选项的目的是在现有行无效时触发错误。如果不允许,它将允许约束并仅将其应用于后续插入否,它将在重新启用禁用的约束时强制重新检查。好的,谢谢,因此我假设外键的with check选项也是如此。您有一个冲突:即,e一个不符合约束的值:Pure and Simple。我看不到有效的问题。很抱歉,我认为使用“With check”选项的目的是在现有行无效时触发错误。如果不允许,它将允许约束并仅将其应用于后续插入否,它将在重新启用禁用的约束时强制重新检查。好的,谢谢,因此我假设外键的with check选项也是如此。