Sql 选择要执行的案例Calar()

Sql 选择要执行的案例Calar(),sql,vb.net,sql-server-2008-r2,executescalar,Sql,Vb.net,Sql Server 2008 R2,Executescalar,我正在尝试向表中插入新记录。表中的第一个字段应该是一个自动编号,即使它现在不是,我正在尝试运行ExecuteScalar()来检索该字段的MAX(ELECT\u BONUS\u DFRL\u SEQ\ID,如果它为NULL或0,我想将其设为1,否则将其设为MAX(e.ELECT\u BONUS\u DFRL\u SEQ\ID)+1 我对SQL不是很熟悉,我已经尽了最大的努力来正确地格式化它,但我可以说我对某些事情不在行 SELECT CASE WHEN e.ELECT_BONU

我正在尝试向表中插入新记录。表中的第一个字段应该是一个自动编号,即使它现在不是,我正在尝试运行
ExecuteScalar()
来检索该字段的
MAX
ELECT\u BONUS\u DFRL\u SEQ\ID
,如果它为NULL或0,我想将其设为1,否则将其设为
MAX(e.ELECT\u BONUS\u DFRL\u 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;
我希望
nextID
将保留序列中的下一个数字

例如:

+------------------+--------------+
|ELECT_BONUS_SEQ_ID|  Percentage  |
+------------------+--------------+
|        1         |      100     |
+------------------+--------------+
|     nextID       |              |  <- new record to insert
+------------------+--------------+
|选举奖金(序号)ID |百分比|
+------------------+--------------+
|        1         |      100     |
+------------------+--------------+

|nextID | |看起来您正试图在
选择中更新源数据,这是不可能的。您的意思是这样的吗

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;
选择案例
当e.ELECT_BONUS_DFRL_SEQ_ID为NULL或MAX(e.ELECT_BONUS_DFRL_SEQ_ID)<1时
那么1
其他最大值(e.ELECT_BONUS_DFRL_SEQ_ID)+1
结束时为选择奖金序列ID
从被选为e的奖金
按e.ELECT_BONUS_DFRL_SEQ_ID分组;

如果您试图更新源数据,那么您需要在一条语句中进行更新,在另一条语句中进行选择。

我认为您的第一句话概括了我所要做的事情。该死。知道任何解决方法吗?问题是,从本质上讲,我并不是在试图更新,而是在试图保留一个用于查询的值。我希望这是有意义的。@Newbie那么我发布的查询会起作用吗?请注意,
ExecuteScalar
只返回一个值,如果您按
ELECT\u BONUS\u DFRL\u SEQ\u ID
进行分组,那么您可能会返回多个值,并且第一个值之后的任何值都将被忽略。我不确定您的查询具体是什么。因此,如果它为Null或<1,则返回1。什么是
T如果条件为真,则列值将为
1
,否则将为
MAX(e.ELECT\u BONUS\u DFRL\u SEQ\u ID)+1
我刚意识到你在一列上调用
MAX
,但按该列分组,这似乎不正确。你需要
分组吗?还是需要在另一列上分组?我有点搞不清楚你想做什么,你想检索下一个可用的递增数字吗?这样你就可以n在插入中使用它?是的,没错。对不起,我在解释方面有点不好,哈哈。在这种情况下,这里是您要寻找的答案@AndrePageot,我相信就是它。谢谢,谢谢!
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;