2014-03-24 107 views
0

基本上我只想在表B中的列爲NULL時允許表A中的編輯/更新。表A和表B引用相同的主鍵ID。所以像是;基於兩個表關係的約束?

-- Only allow Table A to be updated when Table B column is NULL 

update TableA 
set blah = @a, foo = @b 
from tablea 
inner join tableb on tablea.id = tableb.id 
where tableb.column is null 

是否有某種方法可以將此用作表A的約束條件?

+0

您可以使用觸發器。你的意思是'tableb.column是空'? –

回答

1
CREATE TRIGGER tr_Instead_Update_Table_A 
ON TABLEA 
INSTEAD OF UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF NOT EXISTS(SELECT 1 
       FROM deleted d INNER JOIN TableB B 
       ON d.PK_Column = B.PK_Column 
       WHERE B.ColumnName IS NULL) 
    BEGIN 
     RAISERROR('Invalid update',16,1) 
     RETURN; 
    END 

    -- Your update statement here 

END 
+0

如果我的更新語句存在於存儲過程中並且正在被應用程序調用,我可以保持原樣,還是必須將其放入觸發器中? – dotnetN00b

+0

答案是:「使用插入的表在觸發器中在目標表中插入新值」。 – dotnetN00b