我正在尝试将新记录插入表中。表中的第一个字段应该是一个自动编号,即使它现在不是,我试图运行ExecuteScalar()
来检索该字段的MAX
({{1如果它是NULL或0,我想将它设为1,否则将其设为ELECT_BONUS_DFRL_SEQ_ID
。
我对SQL的熟悉程度并不是很熟悉,而且我已经尽力尝试正确地格式化它,但我可以告诉我我正在做些什么。
MAX(e.ELECT_BONUS_DFRL_SEQ_ID) + 1
SQLFiddle - 我一直在说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;
声明中的=
错误。
现在,我考虑创建一个像THEN
这样的变量并使用它来保存值1或MAX + 1,但我不确定这是否会干扰我的@NextID
我的节目。
我也不确定是否允许为这些列分配值,我的意思是: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
PS - 如果您正在查看SQLFiddle并且对数据类型感到头疼,那么所有+------------------+--------------+
|ELECT_BONUS_SEQ_ID| Percentage |
+------------------+--------------+
| 1 | 100 |
+------------------+--------------+
| nextID | | <- new record to insert
字段都将是加密数据,并且设置DDL的人员不会{ {1}} varchar
&amp; SEQ_ID
所以它不会自动增量。 (这将在未来得到解决,我希望。)
如果有任何想法,请告诉我。另外,如果你想解释为什么它对我尝试的方式不起作用,请做!
答案 0 :(得分: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。