我是SQL的初学者。我在嵌入式系统上使用sqlite,QT。我想在这里设置一个触发器。触发器是每当主键Id大于32145时,应设置channelNum = 101。我想设置attrib名称 - 文本,但我得到了编译问题。我认为触发器的设置是DDL的一部分 - 数据定义语言。如果我错了,请告诉我。这是我的创建db代码。我得到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 =&#34;喜剧&#34;。我正在使用qt - sqlite。谢谢!你的回复。
答案 0 :(得分:1)
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;