我有一个带以下代码的Excel工作簿 -
Sub Button1_Click()
Dim conn As New ADODB.Connection
Dim iRowNo As Integer
Dim sFirstName, sLastName As String
With Sheets("Sheet1")
'Open a connection to SQL Server
conn.Open "Provider=SQLOLEDB;" & _
"Data Source=server1;" & _
"Initial Catalog=table1;" & _
"User ID=user1; Password=pass1"
'Skip the header row
iRowNo = 2
'Loop until empty cell in CustomerId
Do Until .Cells(iRowNo, 1) = ""
sFirstName = .Cells(iRowNo, 1)
sLastName = .Cells(iRowNo, 2)
'Generate and execute sql statement
' to import the excel rows to SQL Server table
conn.Execute "Insert into dbo.Customers (FirstName, LastName) " & _
"values ('" & sFirstName & "', '" & sLastName & "')"
iRowNo = iRowNo + 1
Loop
MsgBox "Customers imported."
conn.Close
Set conn = Nothing
End With
End Sub
这会打开到我的数据库的连接,并输入指定列中的值。
主键是数据库上的一个递增键。问题是它将复制所有值。
我想将新的数据行添加到Excel表格中,只插入那些不存在的行。
我尝试了不同的方法('merge'、'if exist'、'if not exist' 等),但是我做不对。
解决方案必须通过 VBA。使用 SSMS 设置链接不是一个选择。
我知道可能可以使用临时表,然后触发执行合并操作的过程,但我希望将其作为最后的选择。还没有研究过(正在阅读我的 MS SQL 圣经书),但我希望不需要这样做。
---@Kannan 的答案更新---
VBA 的新部分 -
conn.Execute "IF EXISTS (SELECT 1 FROM dbo.Customers WHERE FirstName = '" & sFirstName & "' and LastName = '" & sLastName & "') " & _
"THEN UPDATE dbo.customers SET WHERE Firstname = '" & sFirstName & "' and LastName = '" & sLastName & "' " & _
"ELSE INSERT INTO dbo.Customers (FirstName, LastName) " & _
"VALUES ('" & sFirstName & "', '" & sLastName & "')"
这会返回错误“Incorrect syntax near the keyword 'THEN'。”。