我是Firebird的新手,我遇到了很多问题。我想在从另一个表中选择的表中插入各种行。
这是代码:
/*CREATE GENERATOR POS; */ SET GENERATOR POS TO 1; SET TERM ^; create trigger BAS_pkassign for MATERIAL active before insert position 66 EXECUTE BLOCK AS declare posid bigint; select gen_id(POS, 1) from RDB$DATABASE into :posid; BEGIN END SET TERM ; ^ INSERT INTO MATERIAL ( /*ID */ LOCATION, POSID, ARTID, ARTIDCONT, QUANTITY ) SELECT 1000, ':posid', 309, BAS_ART.ID, 1 FROM BAS_ART WHERE BAS_ART.ARTCATEGORY LIKE '%MyWord%'
ID应该从66开始自动递增。posid应该从1开始自动递增。
实际上,它没有插入任何内容。
我正在使用Firebird Maestro,并且刚刚打开了SQL脚本编辑器(在执行脚本时不会抛出任何错误消息)。
有谁能够帮我?
谢谢!
附加信息:
触发器应自动增加“ ID”列-但我不知道如何精确地更改它才能起作用。。:: posid使用它:posid会引发错误,但是这样就没有错误(我想它被解释为细绳)。但是我如何正确使用它呢?
我执行它时不会出错。表格结构简单。我有2张桌子:1。
Material ( ID (INTEGER), Location (INTEGER), POSID (INTEGER), ARTID (INTEGER), ARTIDCONT (INTEGER), QUANTITY (INTEGER), OTHERCOLUMN (INTEGER))
和2.其他表格
BAS_ART (ID (INTEGER), ARTCATEGORY (VARCHAR255))
->我想将表BAS_ART中所有在ARTCATEGORY列中包含“ MyWord”的条目插入到MATERIAL表中。
我不明白为什么您根本需要扳机。
这个问题:
我想将表BAS_ART中包含“ MyWord”的所有条目插入到MATERIAL表中
可以用一个insert ... select语句解决。
insert ... select
insert into material (id, location, posid, artid, quantity) select next value for seq_mat_id, 1000, next value for seq_pos, id, 1 from bas_art where artcategory = 'My Word';
假定存在第二个序列(也称为“生成器”),该序列seq_mat_id为列提供了新的ID。material.id
seq_mat_id
material.id