繁体   English   中英

从数据库中的其他列创建列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM