我的数据库中有两个表 - MPRS
和ALL_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
答案 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