【问题标题】:Firebird autoincrement columnFirebird 自动增量列
【发布时间】:2013-09-23 11:48:24
【问题描述】:

我需要帮助在 Firebird 中创建一个自动增量列。

下面是我的桌子

我希望列 Seqid 自动递增

create Table TS_PRODUCT_PRICEHISTORY
(
  Seqid int not null,
  Remarks varchar(100)
)

我创建了一个生成器

CREATE GENERATOR tsproductpricehistory_gen_id;

然后创建一个触发器

CREATE TRIGGER aitspph_id FOR TS_PRODUCT_PRICEHISTORY
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.SEQID IS NULL) THEN
NEW.SEQID = GEN_ID(tsproductpricehistory_gen_id,1);
END 

当我尝试通过上述代码创建触发器时,出现此错误

错误:*** IBPP::SQLException *** 上下文:Statement::Prepare( CREATE TRIGGER aitspph_id FOR TS_PRODUCT_PRICEHISTORY ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.SEQID IS NULL) THEN NEW.SEQID = GEN_ID(tsproductpricehistory_gen_id,1) ) 消息:isc_dsql_prepare 失败

SQL 消息:-104 无效令牌

引擎代码:335544569 引擎消息:动态 SQL 错误 SQL 错误代码 = -104 命令行意外结束 - 第 6 行,第 50 列

我似乎找不到创建触发器的代码有什么问题。

【问题讨论】:

  • 您是否尝试更改终结符?设定期限 ^^ ;在您创建触发器语句之前。 Example in the Firebird FAQ
  • 你是如何(什么工具)执行这个 DDL 的?

标签: triggers generator firebird


【解决方案1】:

试试这个:

CREATE TABLE TS_PRODUCT_PRICEHISTORY (
  SEQID    INTEGER NOT NULL,
  REMARKS  VARCHAR(100)
);

/* Autoincrement for field (SEQID) */
CREATE GENERATOR GEN_TS_PRODUCT_PRICEHISTORY_ID;

SET TERM ^ ;

CREATE TRIGGER TS_PRODUCT_PRICEHISTORY_BI FOR TS_PRODUCT_PRICEHISTORY
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.SEQID IS NULL) THEN
  NEW.SEQID = GEN_ID(GEN_TS_PRODUCT_PRICEHISTORY_ID,1);
END^

SET TERM ; ^

【讨论】:

  • OP 和研究人员为什么要“试试这个”?一个好的答案总是包括一些解释它在做什么以及为什么它是可取的。仅代码的答案是低价值的。请让您的回答具有教育意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2019-05-11
  • 2011-12-05
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多