2014-03-24 72 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