Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于两个表的关系的约束?_Sql Server_Tsql_Sql Server 2012_Constraints - Fatal编程技术网

Sql server 基于两个表的关系的约束?

Sql server 基于两个表的关系的约束?,sql-server,tsql,sql-server-2012,constraints,Sql Server,Tsql,Sql Server 2012,Constraints,基本上,我只想在表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上

基本上,我只想在表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上的约束?

您可以使用触发器。您所说的
tableb.column为null是什么意思?
?如果我的update语句在存储过程中,并且被应用程序调用,我可以保持它的原样,还是必须将它放入触发器中?答案是:“使用插入的表在目标表中插入新值,在触发器中”。
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