SQLite Триггер для автоинкрементации одного столбца, когда другой не является уникальным - PullRequest
0 голосов
/ 07 июля 2010

Я ищу способ иметь триггер, который просматривает поле Timestamp и, если он находит автоинкремент совпадения, запись вставляется в другой столбец.Таким образом, у меня было бы поле метки времени и поле версии.Если вставляемая запись имеет временную метку, которая соответствует записи, уже находящейся в таблице, то автоматически вводится поле версии.Любые идеи ....

Ответы [ 2 ]

1 голос
/ 15 июля 2010

Если ваш столбец версии равен ver, а столбец отметки времени - ts

CREATE TRIGGER foo AFTER INSERT ON sometable
BEGIN
    UPDATE sometable SET
        ver=(SELECT MAX(ver)+1 FROM sometable WHERE ts=NEW.ts)
    WHERE rowid=NEW.rowid;
END;

Если вы укажете значение по умолчанию 0 для столбца ver, то записи будут пронумерованы от 1 и далее..

0 голосов
/ 09 ноября 2011

Я проголосовал за Энтони Уильямса, но после некоторого тестирования я обнаружил, что он не работает правильно.

Я еще немного прочитал, и на самом деле вы можете создать псевдоним внутреннего ROWID SQLite, просто добавив INTEGER PRIMARY KEY к своему идентификатору, или просто используйте ROWID и не беспокойтесь о добавлении собственного поля.

Подробнее об этом: http://www.sqlite.org/autoinc.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...