SELECT CASE到ExecuteScalar()

时间:2014-03-14 14:55:13

标签: sql vb.net sql-server-2008-r2 executescalar

我正在尝试将新记录插入表中。表中的第一个字段应该是一个自动编号,即使它现在不是,我试图运行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所以它不会自动增量。 (这将在未来得到解决,我希望。)

如果有任何想法,请告诉我。另外,如果你想解释为什么它对我尝试的方式不起作用,请做!

1 个答案:

答案 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。