【发布时间】:2017-01-10 15:28:40
【问题描述】:
我有一个包含以下代码的 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 工作表中添加新的数据行,并且只插入那些不存在的行。
我尝试了不同的方法(“合并”、“如果存在”、“如果不存在”等),但我做不到。
解决方案必须通过 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 & "')"
这会返回错误“关键字“THEN”附近的语法不正确。
【问题讨论】:
标签: sql-server excel ssms vba