2015-07-28 26 views
2

我有一个表PO_HEADER具有特定值的两列 -SQL服务器 - 约束,以防止在同一时间

PO_NO | STATUS | AUTHORISATION DATE | AUTHORISATION CODE | .... 

在我的申请PO与8状态创建,然后授权后的状态更改为1.我的问题是,有时当PO被保存时,即使没有任何代码(我可以找到)也能得到状态1而不是8。

那么,是不是可以创建,将阻止任何试图离开时“授权码”空(NULL)“状态”设置为1更新的约束?

+4

'ALTER TABLE不要再增加约束CK_your_Constraint_name CHECK(状态= 1 AND(授权码= '' 或授权码IS NULL))'但也许你要检查触发器该表或交易的问题,它不是很好控制的设计缺陷与检查约束 – Mihai

+0

好吧,我想我犯了一个错误,改变'CHECK(状态!= 1 AND ....'因为你不希望出现这种情况 – Mihai

+1

有别在数据库中根本不会出现任何触发器,也不会涉及存储过程中的事务。我希望约束会强制发生错误,并让我找到设置无效状态的内容。 –

回答

0

只要使用这个检查约束

ALTER TABLE t ADD CONSTRAINT CK_your_Constraint_name 
CHECK (STATUS != 1 AND (AUTHORISATION CODE = '' OR AUTHORISATION CODE IS NULL))