[英]Create column from other columns in Database
我有一个表名: test
ID | 前缀| 身份识别码
ID的类型是INTEGER,它是从ID_SEQ中选择的
前缀的类型为VARCHAR(6)
ACCID是前缀+ ID的组合
当我插入ID和Prefix值(例如)时,我想自动创建ACCID
INSERT INTO TEST (PREFIX) VALUES ('A01407V');
并且数据库将ACCID存储为“ A01407V000001”
我创建序列为
CREATE SEQUENCE ID_SEQ AS INT MAXVALUE 999999 CYCLE;
如何执行SQL语句以产生此结果?
感谢您提供的所有解决方案和建议。
附言 我使用Apache Derby作为我的SQL Server
如手册中所述 ,Derby支持生成的列(从10.5版开始)
真正的问题是格式化带有前导零的数字,因为Derby对此不起作用。
如果您确实认为需要存储一个值,该值始终由表中已存储的值确定,则可以使用以下方法:
create table test
(
id integer,
prefix varchar(6),
accid generated always as (prefix||substr('000000', 1, 6 - length(rtrim(char(id))))||rtrim(char(id)))
);
表达式substr('000000', 1, 6 - length(rtrim(char(id))))||rtrim(char(id))
只是格式化带前导零的ID的一种复杂方法。
我强烈建议您不要存储此值。 如果确实需要在SQL中访问此值,则创建显示该值的视图要干净得多。
您可以使用“计算列”。
是基于表中其他列的计算列。 我们可以物理地保存/不保存列的数据。 表将自动更新此列的值。
syntax:
columnname AS expression [PERSISTED]
--PERSISTED will make it physically saved, otherwise it will be calculated every time.
我们可以在计算列上创建索引。
您在表CREATE Script中添加以下内容
ACCID AS Prefix + CAST(ID AS CHAR(6)) [PERSISTED]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.