【问题标题】:How do you auto increment a varchar value in db2?如何在 db2 中自动增加 varchar 值?
【发布时间】:2015-11-06 02:00:56
【问题描述】:

我已经尝试过了,但我收到了一个错误:

SQLCODE = -104,错误:非法符号“'T'”。一些可能的符号 合法的是:定位器安全

CREATE TABLE STUDENT_REGISTER
(              
SNO INT NOT NULL ,                          
STUDENT_ID AS 'T'+CAST( SNO AS VARCHAR(10)) 
PERSISTED PRIMARY KEY,                      
FIRST_NAME VARCHAR(20),                     
LAST_NAME VARCHAR(20),                      
DATE_OF_BIRTH DATE,                         
ADDRESS VARCHAR(100),                       
MOBILE_NO BIGINT                            
)   

【问题讨论】:

  • 如果我运行您的代码,即 concat 语句,它返回 SQLCODE = -199,错误:非法使用关键字 CONCAT。预计令牌定位器安全
  • ifi 使用 'as' 运行 sqlcode=-104 返回
  • 你可以试试STUDENT_ID VARCHAR(10) WITH DEFAULT 'T'+SNO。如果不采用+进行拼接,可以尝试使用||
  • 你为什么在号码前加上T?我担心你会把它用作多部分键(这是不赞成的)。理想情况下,您可能应该为主键设置一个常规整数(autogen)列,然后为任何“已发布”id 设置一个额外的唯一键列;这不应该反映实际的数据库内部(主)键。除此之外,如果您最终有足够的学生,那么更改外部可见的 id 会变得更加容易......

标签: sql db2


【解决方案1】:

你可以写一个触发器,

CREATE TRIGGER foo BEFORE INSERT ON STUDENT_REGISTER FOR EACH ROW
  IF NEW.STUDENT_ID IS NULL THEN
    SET NEW.STUDENT_ID := 't' + NEW.SNO;
  END IF;;

您可以试试这个并告诉我,我自己还没有尝试过,但我很确定它应该可以工作,所以请尝试一下,让我知道它是否有效

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 2015-06-26
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多