SQL更新给错误的结果

问题描述:

我在VB.NETSQL更新给错误的结果

下面的SQL语句
Dim READER As SqlDataReader 

    Try 
     konneksie.Open() 
     Dim Query As String 

     Query = "Update blokkeklaar " & _ 
     " set Klaarvb = 'JA' " & _ 
     " where KlaarEZY = 'YES'" & _ 
     " Update blokkeklaar " & _ 
     " set Klaarvb = 'NEE' " & _ 
     " where KlaarVB IS NULL" 

     COMMAND = New SqlCommand(Query, konneksie) 
     READER = COMMAND.ExecuteReader 
     MessageBox.Show("KlaarVB verander ") 
     konneksie.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    Finally 
    End Try 
    konneksie.Close() 

我不明白为什么klaarvb填充了“东东”,其中klaarvb不为空?

+0

如果您在更新语句之前和之后发布样本数据会更有帮助。 – hurcane

你正在试图做的2个独立的更新有一个声明。如果你想有一个单独的语句的解决方案,尝试:

update blokkeklaar 
set Klaarvb = case 
       when KlaarEZY = 'YES' then 'JA' 
       when KlaarVB is null then 'NEE' 
       else Klaarvb -- Thanks hurcane 
       end; 

这会按顺序评估,并退出当条件满足,因此,如果第一个条件为真,第二个将不评估或应用。

+0

没有其他条件的情况下,我相信如果在语句执行之前它不为null,Klaarvb将被设置为null。为了保存数据,你应该有一个“其他Klaarvb”。 – hurcane

你必须把语句之间分号或单独执行它们:

Query = "Update blokkeklaar " & _ 
     " set Klaarvb = 'JA' " & _ 
     " where KlaarEZY = 'YES';" & _ //<--put semiColon here 
     " Update blokkeklaar " & _ 
     " set Klaarvb = 'NEE' " & _ 
     " where KlaarVB IS NULL" 

另外,作为一个侧面说明,你最好使用ExecuteNonQuery代替ExecuteReader

+0

编辑致谢.... – apomene

+0

严格地说,SQL将执行这两个语句完全相同或不带分号。空格足以分隔命令。仅当命令之间的语法不明确时才需要分号。对于这两个更新语句,没有歧义。 – hurcane