我是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;