내가 원하는 것은 새로운 학생의 학년 속성을 관리하는 것입니다. 학생 ID와 학년이 포함 된 삽입 된 튜플의 등급 값이 9보다 작거나 12보다 큰 경우이 값을 NULL로 변경하려고합니다. 동시에 null 값을 갖는 삽입 된 튜플을 9로 변경하려고합니다.SQLLite에서 다중 업데이트 트리거
다음 코드가 잘못되었습니다.
CREATE TRIGGER R1
AFTER INSERT ON Students
FOR EACH ROW
BEGIN
UPDATE Students
SET grade = NULL
WHERE grade < 9 OR grade > 12;
UPDATE Students
SET grade = 9
WHERE grade = NULL;
END;
두 개의 UPDATE 문은 INSERT가 실행 된 직후 Student 테이블에서 수행되어야합니다.
UPDATE Students
SET grade = 9
WHERE grade IS NULL;
증명 = NULL
및 IS NULL
로 : 우리는 null 값을 가질 것이다> 9> 12 업데이트 할 당신은 = NULL
에서 IS NULL
에 두 번째 조건을 교체해야
안녕하세요, 조금 쿼리를 다시 포맷하고 모든 SQL 키워드를 대문자로. 희망은 내가 F'd하지 않았다 :) http://www.sqlite.org/lang_createtrigger.html Waitaminute,'grade = NULL'은'grade IS NULL'이 아니어야합니까 ??? – biziclop
첫 번째 실행 후 두 번째 업데이트가 수행된다는 잘못된 결과를 반환합니다 ... 내가 원하는 것은 둘 다 동시에 수행된다는 것입니다. –
동시에 실행할 수는 없으므로 불가능합니다. 그것들은 순차적으로 만 실행할 수 있습니다. 귀하의 질문에 두 업데이 트가 테이블의 모든 행을 업데이 트합니다 (NULL 또는 9.112가 아님). 예를 들어'NEW.id'를 사용하여 업데이트하려는 행을 정확히 지정해야합니다. 그렇지 않으면 모든 잘못된 등급은 각 INSERT 후에'NULL' /'9' 사이에서 플립 플롭합니다. – biziclop