约束或触发

时间:2013-09-11 14:11:26

标签: sql-server-2008 triggers constraints

我在这里非常热门,

我有两张桌子

  1. MonthlyPaymentEmpID, PaymentType, swiftcode
  2. EmpAssignmentEmpID, status
  3. EmpAssignment.Status只能是1或2

    问题是:

    我想要一个约束或触发器,这样在更新MonthlyPayment时,如果PaymentType = 1那么Swiftcode应该是唯一的,并且仅对status = 1。< / p>

    如果PaymentType <> 1swiftcode不应该是强制性的,而是唯一的 此外,约束不应影响status = 2

    的约束

    提前致谢。

1 个答案:

答案 0 :(得分:1)

使用域,约束将成为域约束:

DROP DOMAIN PAYTYPE CASCADE;
CREATE DOMAIN PAYTYPE AS INTEGER
    CHECK (value >= 1 AND value <= 666)
    ;

DROP DOMAIN ESTATUS CASCADE;
CREATE DOMAIN ESTATUS AS INTEGER
    CHECK (value >= 1 AND value <= 2)
    ;

DROP TABLE MonthlyPayment CASCADE;
CREATE TABLE MonthlyPayment
    ( EmpID INTEGER NOT NULL PRIMARY KEY
    , PaymentType PAYTYPE NOT NULL
    , swiftcode varchar
    );

DROP TABLE EmpAssignment CASCADE;
CREATE TABLE EmpAssignment
    ( EmpID INTEGER NOT NULL PRIMARY KEY
    , status ESTATUS NOT NULL
    );

现在测试一下:

 INSERT INTO EmpAssignment(EmpID,status) VALUES(1,9);

结果(使用Postgresql-9.1):

ERROR:  value for domain estatus violates check constraint "estatus_check"