2012-10-21 46 views
0

我想创建一个处理表中某个列的触发器。SQLite如果列存在解决方案?

如果这样的列不存在,触发器必须处理会发生的错误。

可能吗?我没有这样的解决方案搜索网页,因为“if exists”命令在SQLite中不存在。

编辑:为触发(在注释请求) 例子:

CREATE TRIGGER trigger_name 
    AFTER UPDATE ON table_1 
    BEGIN 
     IF exist (select col_1 from table_1) 
      BEGIN 
      update table_1 set col_1='1' where id = '2' 
      END 
    END 

如果COL_1不存在,它会使一个错误。

+0

你能提供一个触发这个触发器的查询的例子吗? – 2012-10-21 11:42:31

+1

当然,我提供了一个例子。 –

回答

2

在SQLite中,triggers can execute only normal SELECT/INSERT/UPDATE/DELETE commands;没有任何编程结构像IF

如果你想执行动态代码,你必须注册自己的用户定义函数(如何做到这一点取决于你所使用的语言/驱动器),并且从触发调用它:

CREATE TRIGGER name 
AFTER UPDATE ON table_1 
BEGIN 
    SELECT my_custom_function(); 
END 

在您的函数中,您可以使用PRAGMA table_info查询来检查表结构并执行UPDATE查询。

+0

我不明白。在DB中我可以写一个函数? –

+1

要重复一遍:这取决于您使用的语言/驱动程序。 –