【问题标题】:How do you insert a row into a null table with auto incrementing ID?如何在具有自动递增 ID 的空表中插入一行?
【发布时间】:2019-06-23 13:05:17
【问题描述】:

我想将具有自动递增 uid 的行插入到为空的表中。使用以下代码,我收到一个错误,因为您不能 +1 空值(对于 [TABLE_UID])。我试过添加INT NOT NULL AUTO_INCREMENT,但它不是有效的语法。

cmdEx.ExecuteNonQuery("INSERT INTO [TABLE_NAME]([TABLE_UID], KIP_UID, NEXT_DATE, STUT_UID, CS_DATE, CE_DATE, S_M, PG_A) VALUES ((SELECT MAX([TABLE_UID]) + 1 FROM [TABLE_NAME]), '127', '2009-06-15T13:45:30', '0', '2009-06-15T13:45:30','2010-06-15T13:45:30', 'boom', 0 )");

【问题讨论】:

  • 您使用的是哪个 DBMS?对于其中一些,在空表中插入第一行会导致自动增量生成值 1,正如预期的那样。

标签: sql insert increment auto-increment


【解决方案1】:

你可以使用NVL或coalesce函数,当col为null时赋值为0。

Query1 - 
with t1 as (select null as col1) select max(col1) + 1 from t1;

o/p
NULL

Query 2 -
with t1 as (select null as col1) select nvl(max(col1),0) + 1 from t1;

o/p
1

【讨论】:

  • 没有办法直接在插入语句中执行此操作吗?您给出的答案绝对是我正在寻找的,但我不确定如何让它与 C# 接口中的上述插入语句协同工作。
  • 您也可以在插入语句中执行此操作,将 nvl 函数添加到 select 子句 - SELECT MAX(NVL(PMS_CALC_SCHEDULE_UID),0) + 1 FROM PMS_CALC_SCHEDULE
  • 谢谢,这没有用,但这样做了:(SELECT COALESCE(MAX(PMS_CALC_SCHEDULE_UID), 0)
【解决方案2】:

我的问题的解决方案是:

cmdEx.ExecuteNonQuery("INSERT INTO PMS_CALC_SCHEDULE (PMS_CALC_SCHEDULE_UID, USER_UID, SCHEDULED_DATE, PMS_CALC_STATUS_UID, CALCULATION_START_DATE, CALCULATION_END_DATE, STATUS_MESSAGE, PROGRESS) VALUES ((SELECT COALESCE(MAX(PMS_CALC_SCHEDULE_UID), 0) + 1 FROM PMS_CALC_SCHEDULE), 127, '2009-06-15T13:45:30', 0, '2009-06-15T13:45:30','2010-06-15T13:45:30', 'TEST DELETE THIS ROW', 0 )"); //(SELECT MAX(PMS_CALC_SCHEDULE_UID) + 1 FROM PMS_CALC_SCHEDULE)

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 2014-06-05
    • 2010-11-25
    • 2018-07-05
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多