我正在尝试将新记录插入表中。表中的第一个字段应该是一个自动编号,即使它目前不是,我正在尝试运行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_ID
an INT
&IDENTITY
所以它不会自动递增。(这将在未来得到解决,我希望。)
如果有人有任何想法,请告诉我。另外,如果您想说明为什么它不适用于我尝试的方式,请这样做!