我是SQL中的初學者。我在嵌入式系統上使用sqlite,QT。我想在這裏設置一個觸發器。觸發器是每當主鍵Id大於32145時,應設置channelNum = 101。我想設置attrib的名字 - 也是文本,但是我得到了編譯問題。我相信觸發器的設置是DDL - 數據定義語言的一部分。請讓我知道,如果我在這裏錯了。這是我的創建數據庫代碼。我得到的SQL查詢錯誤。也請建議如何設置文本 - attrib =「COmedy」。爲什麼在sqlite中觸發查詢失敗 - QT在這裏 - ?
/** 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。謝謝!爲您的答覆。
ID是主鍵,我想你不能用這種方法。 –
如果它沒有auto_incremented,並且您在插入查詢中傳遞了id,那麼請嘗試使用'IF NEW.Id>'而不是'Id>' –