0

我正在尝试将新记录插入表中。表中的第一个字段应该是一个自动编号,即使它目前不是,我正在尝试运行ExecuteScalar()以检索该MAX字段的(ELECT_BONUS_DFRL_SEQ_ID如果它是 NULL 或 0,我想它1,否则做它MAX(e.ELECT_BONUS_DFRL_SEQ_ID) + 1

我对 SQL 并不是很熟悉,我已经尽我所能尝试正确格式化它,但我可以告诉我我在做某事。

SELECT CASE 
        WHEN e.ELECT_BONUS_DFRL_SEQ_ID IS NULL OR MAX(e.ELECT_BONUS_DFRL_SEQ_ID) < 1
        THEN e.BONUS_DFRL_SEQ_ID = '1'
        ELSE MAX(e.ELECT_BONUS_DFRL_SEQ_ID) + 1
    END AS ELECT_BONUS_DFRL_SEQ_ID
FROM ELECT_BONUS_DFRL AS e
GROUP BY e.ELECT_BONUS_DFRL_SEQ_ID;

SQLFiddle= - 它一直说我的THEN语句中有错误。

现在,我考虑创建一个类似的变量@NextID并使用它来保存 1 或 MAX + 1 的值,但我不确定这是否会干扰ExecuteScalar()我的程序。

我也不确定是否允许为这样的列分配值,我的意思是:THEN e.BONUS_DFRL_SEQ_ID = '1'

我的程序中的代码是:

    Dim sql As String = "SELECT MAX(BONUS_SEQ_ID) FROM ELECT_BONUS_DFRL_SEQ_ID;"
    Dim maxCmd As New SqlCommand(sql, conn)
    nextID = Convert.ToInt32(maxCmd.ExecuteScalar())

我希望nextID能保持序列中的下一个数字。

例子:

+------------------+--------------+
|ELECT_BONUS_SEQ_ID|  Percentage  |
+------------------+--------------+
|        1         |      100     |
+------------------+--------------+
|     nextID       |              |  <- new record to insert

PS - 如果您正在查看 SQLFiddle 并在数据类型上摸不着头脑,那么所有varchar字段都将是加密数据,并且设置 DDL 的人没有进行SEQ_IDan INT&IDENTITY所以它不会自动递增。(这将在未来得到解决,我希望。)

如果有人有任何想法,请告诉我。另外,如果您想说明为什么它不适用于我尝试的方式,请这样做!

4

1 回答 1

1

看起来您正在尝试更新其中的源数据,SELECT这是不可能的。你是这个意思吗?

SELECT CASE 
        WHEN e.ELECT_BONUS_DFRL_SEQ_ID IS NULL OR MAX(e.ELECT_BONUS_DFRL_SEQ_ID) < 1
        THEN 1
        ELSE MAX(e.ELECT_BONUS_DFRL_SEQ_ID) + 1
    END AS ELECT_BONUS_DFRL_SEQ_ID
FROM ELECT_BONUS_DFRL AS e
GROUP BY e.ELECT_BONUS_DFRL_SEQ_ID;

如果您尝试更新源数据,则需要在一个语句中执行 UPDATE 并在另一个语句中执行 SELECT。

于 2014-03-14T14:59:07.643 回答