2015-07-28 28 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))