2009-02-25 22 views
6

Estoy tratando de crear un pago básico (BP) mesa con¿Cómo crear una restricción de verificación entre dos columnas en SQL?

CREATE TABLE bp (
    bpid  VARCHAR(5), 
     FOREIGN KEY (bpid) REFERENCES designation(desigid), 
    upperlimit DECIMAL(10,2) NOT NULL, 
    lowerlimit DECIMAL(10,2) NOT NULL, 
    increment DECIMAL(10,2) NOT NULL 
     CONSTRAINT llvalid CHECK (upperlimit > lowerlimit) 
); 

Como se puede ver cerca del final, quiero comprobar si upperlimit es mayor que lowerlimit, ¿cómo puedo hacer eso?

Respuesta

6

Podría (probablemente) depender de la base de datos que utilice.

En comparación con la sintaxis Oracle (por ejemplo aquí: http://www.techonthenet.com/oracle/check.php), lo que se echa en falta que podría ser una '' entre NULL y la restricción

+0

¡Oh, sí! que lo hizo, gracias :) – Unknown

+0

He cometido el mismo error. Gracias :) +1 – Pavitar

1

Aquí es adecuada la consulta SQL ...

CREATE TABLE bp (bpid VARCHAR(5), 
FOREIGN KEY (bpid) REFERENCES designation(desigid), 
upperlimit DECIMAL(10,2) NOT NULL, 
lowerlimit DECIMAL(10,2) NOT NULL, 
increment DECIMAL(10,2) NOT NULL, 
CONSTRAINT llvalid CHECK (upperlimit > lowerlimit)); 

Nota la coma después de NOT NULL y CONSTRAINT en la última línea.

1

El problema es que la ha definido como una restricción de nivel de columna pero hace referencia a otras columnas. Debe definir una restricción en el nivel de la tabla.

ALTER TABLE bp 
    ADD CONSTRAINT CK_limit CHECK (upperlimit > lowerlimit) 
+0

¿Por qué? ¿Qué tipo de diferencias haría? – Unknown

Cuestiones relacionadas