【问题标题】:Need a column to auto increment based on another with trigger需要一列基于另一个带有触发器的列自动递增
【发布时间】:2018-01-16 17:35:57
【问题描述】:

我有一张简单的桌子。它有 5 列,其中两列是 job_numline。我想在插入时将行号留空,如果没有具有该作业号的其他行,则可能使用触发器插入“1”。如果job_num 已经有一行,那么它将采用下一个行号。

这些是我的专栏

`job_Num` int,
`line` int ,
`Description` nvarchar(60),
`qty` int,
`price` int

【问题讨论】:

  • 除非您处于一个非常繁忙的系统中,否则您可能不想尝试以这种方式维护线路,而是在使用 ROW_NUMBER() OVER (PARTITION BY job_NUM ORDER BY someIdOrDate) 如果 RDBMS 支持
  • 触发器是高度特定于供应商的 - 所以请添加一个标签来指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或者完全是别的东西。

标签: sql triggers auto-increment


【解决方案1】:
  1. 创建一个序列。例如,

CREATE SEQUENCE SQ_1 START WITH 1 MAXVALUE 49999999 NOCYCLE;

  1. 使用序列创建触发器。

    CREATE OR REPLACE TRIGGER TRI_1 BEFORE
    INSERT
      ON table_name FOR EACH ROW BEGIN
    SELECT
      SQ_1.NEXTVAL
    INTO
      :NEW.column_name
    FROM
      DUAL;
    END
    ;
    
  2. 插入一条记录就可以看到效果了。

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2014-08-11
    • 2021-04-20
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多