SQL Server Update Query表示表已经退出

时间:2015-06-27 12:04:14

标签: sql sql-server vb.net

我的数据库中有两个表 - MPRSALL_SSC。我想用来自ALL_SSC和Access(我测试我的SQL)的数据更新MPRS表。

但是,当我在SQL Server数据库的VB 2010程序中运行它时,它表示表MPRS已经存在。

我知道确实如此!我不是想创造它。我正在更新FROM它......这个SQL出错的想法吗?

SQL = "UPDATE ALL_SSC LEFT JOIN MPRS ON MPRS.MPAN = ALL_SSC.MPAN1 SET ALL_SSC.PC1 = Format([mprs].[pc],'00'), ALL_SSC.MSPCDC1 = Mid([mprs].[PC_EFD],7,4) & Mid([mprs].[PC_EFD],4,2) & Mid([mprs].[PC_EFD],1,2), ALL_SSC.MTSC1 = [mprs].[MTC], ALL_SSC.MSMCDC1 = Mid([mprs].[MTC_EFD],7,4) & Mid([mprs].[MTC_EFD],4,2) & Mid([mprs].[MTC_EFD],1,2), ALL_SSC.LLF1 = [mprs].[LLF], ALL_SSC.SUPPLIER1 = [mprs].[SUPPLIER], ALL_SSC.REGI1 = Mid([mprs].[SSD],7,4) & Mid([mprs].[SSD],4,2) & Mid([mprs].[SSD],1,2), ALL_SSC.ENG_STATUS1 = 0 WHERE (((ALL_SSC.MPAN1) Is Not Null) AND ([mprs].[ENERG_STATUS]='E'));"
cmd = New SqlCommand(sSQL, cNN)
Try
    Try
    If cNN.State <> ConnectionState.Open Then
        cNN.Open()
    End If

    Catch exCnn As Exception
    MsgBox(exCnn.Message)
    End Try
    cmd.ExecuteNonQuery()
Catch ex As Exception
    MsgBox("Cannot continue. " & ex.Message)
    Exit Sub
End Try

3 个答案:

答案 0 :(得分:1)

SQL Server中JOIN UPDATE的正确语法是:

UPDATE a
    SET PC1 = . . .
    FROM ALL_SSC a LEFT JOIN
         MPRS m
         ON m.MPAN = a.MPAN1
    WHERE . . .;

也就是说,您需要一个FROM子句,它位于SET之后。

答案 1 :(得分:1)

当您打算使用“SQL”时,您不小心使用了变量“sSQL”。 另一个有意义的变量名称很重要的例子。

答案 2 :(得分:0)

感谢戈登的帮助。从Access SQL迁移到SQL Server需要进行一两个其他更改,但这是最终在SQL Server中工作的SQL。

    UPDATE a
    SET 
    a.PC1 = '0' + m.[pc], 
    a.MSPCDC1 = substring(m.[PC_EFD],7,4) + substring(m.[PC_EFD],4,2) + substring(m.[PC_EFD],1,2), 
    a.MTSC1 = m.[MTC], 
    a.MSMCDC1 = substring(m.[MTC_EFD],7,4) +substring(m.[MTC_EFD],4,2) + substring(m.[MTC_EFD],1,2), 
    a.LLF1 = m.[LLF], 
    a.SUPPLIER1 = m.[SUPPLIER], 
    a.REGI1 = substring(m.[SSD],7,4) + substring(m.[SSD],4,2) + substring(m.[SSD],1,2),
    a.ENG_STATUS1 = 0 

    FROM [myDataBase].[dbo].ALL_SSC a LEFT JOIN
         [myDataBase].[dbo].MPRS m
         ON m.MPAN = a.MPAN1

    WHERE (((a.MPAN1) Is Not Null) AND (m.[ENERG_STATUS]='E'));

但是,当我通过VB 2010在数据库上执行完全相同的代码时,我得到相同的失败消息。这是vb代码

For iMPAN As Integer = 1 To 3
'mpan - energised
SQL = "UPDATE a SET a.PC" + iMPAN.ToString + " =  '0' + m.[pc], a.MSPCDC" + iMPAN.ToString + " =  substring(m.[PC_EFD],7,4) + substring(m.[PC_EFD],4,2) + substring(m.[PC_EFD],1,2), a.MTSC" + iMPAN.ToString + " =  m.[MTC], a.MSMCDC" + iMPAN.ToString + " =  substring(m.[MTC_EFD],7,4) +substring(m.[MTC_EFD],4,2) + substring(m.[MTC_EFD],1,2), a.LLF" + iMPAN.ToString + " =  m.[LLF], a.SUPPLIER" + iMPAN.ToString + " =  m.[SUPPLIER], a.REGI" + iMPAN.ToString + " =  substring(m.[SSD],7,4) + substring(m.[SSD],4,2) + substring(m.[SSD],1,2), a.ENG_STATUS" + iMPAN.ToString + " =  0 FROM ALL_SSC a LEFT JOIN MPRS m ON m.MPAN = a.MPAN1 WHERE (((a.MPAN" + iMPAN.ToString + ") Is Not Null) AND (m.[ENERG_STATUS]='E'));"
Debug.Print(SQL)

cmd = New SqlCommand(sSQL, cNN)
Try
    Try
    If cNN.State <> ConnectionState.Open Then
        cNN.Open()
    End If

    Catch exCnn As Exception

    MsgBox(exCnn.Message)
    End Try
    cmd.ExecuteNonQuery()
Catch ex As Exception
    Debug.Print(ex.Message)

    MsgBox("Cannot continue. " & ex.Message)
    Exit Sub
End Try
Next