如何将Identity列的值用于同一插入中的不同列

时间:2009-12-04 06:45:50

标签: sql db2

我创建了一个这样的表:

CREATE TABLE A
( ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (
START WITH +1
INCREMENT BY +1
NO MINVALUE
NO MAXVALUE
NO CYCLE
CACHE 20
NO ORDER )
, ID_MIRROR CHAR(20))

我想做一个插入,以便自动设置ID,ID_MIRROR将是ID中的内容,但前缀为'PRE'。

我未能成功尝试以下内容:

INSERT INTO A (ID_MIRROR) 
VALUES ( 'PRE' || CHAR(A.ID))
  

错误12/4/2009 6:43:08   AM 0:00:00.296 DB2数据库错误:   错误[42703] [IBM] [DB2 / AIX64]   SQL0206N“A.ID”在。中无效   使用它的上下文。   SQLSTATE = 42703 1 0

insert into A (id_mirror)
VALUES (CONCAT('PRE', CHAR(identity_val_local())))

ID_MIRROR为NULL,后续插入是ID的先前值。

insert into A (id_mirror)
VALUES (CONCAT('PRE', CHAR(scope_identity())))
  

错误12/4/2009 6:11:11   AM 0:00:00.234 DB2数据库错误:   错误[42884] [IBM] [DB2 / AIX64]   SQL0440N没有命名的授权例程   “FUNCTION”类型的“SCOPE_IDENTITY”   找到了兼容的参数。   SQLSTATE = 42884 1 0

2 个答案:

答案 0 :(得分:0)

另一个论坛回答了这样的问题:

INSERT INTO A (ID_MIRROR) VALUES ( 'PRE' || IDENTITY_VAL_LOCAL());

答案 1 :(得分:0)

如果您可以在SELECT语句中随时根据需要简单地创建此列,为什么还需要执行此操作?