sql - SQLiteException «logic error near "ON"» when creating a trigger -
i'm trying use sqlite run nhibernate integration tests. nhibernate's schemaexport
set database me based on mapping files. works fine, except triggers. here's such trigger in .hbm
file looks like:
<database-object> <create> create trigger tr_personinserted on person after insert begin set nocount on update person set modifieddate = getdate(), createddate = getdate() inserted person.personid = inserted.personid set nocount off end </create> <drop> </drop> </database-object>
this works great in sql server 2012.
without trigger schemaexport
works fine when using sqlite. with trigger though, exception when creating schema:
system.data.sqlite.sqliteexception : sql logic error or missing database near "on": syntax error
this not descriptive. i've tried several things bit further, including:
- removing contents (i.e. between
begin
,end
) - removing
as
statement - removing
on
statement - removing underscore trigger name
- adding
;
before statement
nothing seems help.
what missing? correct syntax trigger in sqlite?
i'd prefer solution works fine in sql-server-2012, not fussed can create different trigger per database dialect if needs be.
ps. i'm using nuget package system.data.sqlite (x86/x64).
in sqlite's create trigger accepts syntax in form
create trigger t after insert on x begin {stmts} end
whereas sql server's create trigger, , provided schema, in form
create trigger t on x after insert {stmts}
normalizing 2 different syntax forms across different database engine not seem practical directly specified sql ddl, considering other differences such lack of set nocount in sqlite.
to put full example based of specific case, come down to:
create trigger tr_personinserted insert on person begin update person set modifieddate = datetime('now'), createddate = datetime('now') personid = new.personid; end
Comments
Post a Comment