2017-08-16 61 views
-1

我需要确定MSSQL数据库中数据的完整性。我的数据模型包含两个重要的字段,这些字段是另一个表的外键。例如TripId和ReservationId(随机名,所以不要打扰他们)。整合2列的棘手约束

我需要插入数据的能力,如果: - 预留ID和TRIPID不是空 - ReservationId为空,TRIPID不为空 -ReservationId不是null TRIPID为空

这是棘手的,因为我需要拒绝其中一个Id在antoher组合中使用插入,例如: 我的db包含RES111和TRIP666的记录。我必须能够插入另一个具有相同ID的记录以供预订和旅行。 我不能插入只包含一个ReservationId或TripId或其他组合的数据(例如拒绝:RES111和TRIP777必须被拒绝)

当提供一个Id时,例如ReservationId。 必须拒绝包含带有任何tripId的使用的ReservationId的插入。

我可以在应用程序代码提供这样的过滤,但它必须在数据库级别

+1

请向我们提供一些代码,“我们”编码器是在阅读代码,然后阅读纯英文更好,也提供了你已经尝试了什么至今 – DarkMukke

+3

一些代码,我认为你需要为这个触发。 –

+0

我同意@GordonLinoff,我不认为约束可以处理这种复杂性 – NickyvV

回答

0

做你可以写一个条件插入
对于实例

insert into tblname (value, name) 
select 'foo', 'bar' 
where not exists (select 1 from table where null IN (ReservationId, TripId)); 

当然,你将需要裁缝这个到你需要的东西。

的基本概念是,只要子查询返回的结果,刀片会发生,所以子查询可以是一个非常复杂的约束或检查。

-1

您可以使用Trigger或使用CHECK CONSTRAINT执行此操作,该CHECK CONSTRAINT调用封装了您要强制执行的逻辑的UDF。