2011-11-17 39 views
6

He estado buscando en la web cómo usar "antes del desencadenador" en sqlite. Sé bien al usar "después del disparo". Encontré el que decía que "antes del desencadenante" se usaba para validar antes de realizar cualquier cambio en la base de datos (insertar/actualizar fila en la tabla). Para borrar la expresión, escribí un disparador en el que el tipo es anterior y el evento es insert para validar la marca antes de insertar. Mi disparador esCómo validar con antes de insertar el disparador en sqlite

create trigger mark_insert before insert on exam 
when mark<=50 
begin 
insert into exam(mark) values(50); 
end; 

tal vez es desencadenante mal. Entonces, ¿podrías indicarme los errores? Quiero verificar si la marca es menor o igual a 50. De ser así, quiero insertar el valor predeterminado (en este caso, 50). No estoy muy familiarizado con SQL y desencadenar y comenzar a aprender.

Mi mesa de examen tiene columnas siguientes,

id(pk) | subject | mark 

Respuesta

3

Si desea elevar un error en los datos no válidos, haga lo siguiente:

CREATE TRIGGER trigger_validate_mark BEFORE INSERT ON exam 
WHEN mark<=50 
BEGIN 
    SELECT RAISE(ABORT,'Mark must be at least 50.'); 
END; 

Si sólo desea corregir los datos, hacer esto :

CREATE TRIGGER trigger_min_mark AFTER INSERT ON exam 
WHEN mark<=50 
BEGIN 
    UPDATE exam 
    SET mark=50 
    WHERE id = new.id; 
END; 
+1

gracias por su ayuda. Pero obtuve este error: no hay una marca de columna. ¿Se debe subir()? ¿Puedes explicar sobre la función de subir? Gracias de antemano. – waiyan

+0

'raise' es cómo se genera un error dentro de un desencadenador. http://www.sqlite.org/lang_createtrigger.html –

+0

Después de la instrucción SELECT, ';' es obligatorio. –

3

si desea comprobar la marca si es menor o igual 50

CREATE TRIGGER trigger_min_mark AFTER INSERT ON exam 
WHEN New.mark<=50 
BEGIN 
    UPDATE exam SET mark=50 WHERE id = New.id; 
END 

Sé que cuidado en la declaración when debe especificar New.ColumnName

4

Lo que trata de asegurar que en la definición de la tabla?

CREATE TABLE exam (
    ... 
    CHECK(mark<=50) 
); 
Cuestiones relacionadas