我是SQL的初学者。我在嵌入式系统上使用sqlite QT。我想在这里设置一个触发器。触发条件是,每当主键ID大于32145时,都应设置channelNum = 101。我想设置属性名称-也要设置文本,但是出现编译问题。我相信触发器的设置是DDL-数据定义语言的一部分。如果我错了,请告诉我。这是我的创建数据库代码。我收到sql查询错误。也请建议如何设置文本-attrib =“ COmedy”。

/** associate db with query **/
        QSqlQuery query ( m_demo_db );
        /** Foreign keys are disabled by default in sqlite **/
        /** Here is the pragma to turn them on first **/
        query.exec("PRAGMA foreign_keys = ON;");
        if ( false == query.exec())
        {
            qDebug()<<"Pragma failed";
        }
        /** Create Table for storing user preference LCN for DTT **/
        qDebug()<<"Create Table postcode.db";
        query.prepare(" CREATE TABLE  dttServiceList (Id INTEGER PRIMARY KEY, attrib varchar(20), channelNum integer )" );
        if ( false == query.exec())
        {
            qDebug()<<"Create dttServiceList table failed";
        }
        /** Try placing trigger here **/
        triggerQuery = "CREATE TRIGGER upd_check BEFORE INSERT ON dttServiceList \
                 FOR EACH ROW \
                 BEGIN  \
                IF Id > 32145 THEN SET channelNum=101; \
              END IF; \
                END; ";
         query.prepare(triggerQuery);
         if ( false == query.exec())
         {
             qDebug()<<"Trigger failed !!";
             qDebug() << query.lastError();
         }


另外,如何在触发器中设置文本名称-我想设置attrib =“喜剧”。我正在使用qt-sqlite。谢谢!为您的答复。

最佳答案

SQLite既没有IF也没有SET语句。

documentation所示,您只能在触发器中使用UPDATE / INSERT / DELETE / SELECT语句。

整个触发器的条件可以通过WHEN子句实现。

您不能更改直接插入的值;您必须随后更新该记录:

CREATE TRIGGER upd_check
AFTER INSERT ON dttServiceList
FOR EACH ROW
WHEN NEW.Id > 32145
BEGIN
    UPDATE dttServiceList
    SET channelNum = 101
    WHERE Id = NEW.Id;
END;

09-10 04:33
查看更多