gpt4 book ai didi

sql-server - 使用 VBA 仅将新记录插入到 SQL 表中

转载 作者:行者123 更新时间:2023-12-01 19:33:13 25 4
gpt4 key购买 nike

我有一个包含以下代码的 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 查询不太正确 - SQL IF 中没有 THEN

此外,如果它存在,您不需要执行任何操作,因此只需使用如果不存在即可。

"IF NOT EXISTS (SELECT 1 FROM dbo.Customers WHERE FirstName = '" & sFirstName & "' and LastName = '" & sLastName & "') " & _
"INSERT INTO dbo.Customers (FirstName, LastName) " & _
"VALUES ('" & sFirstName & "', '" & sLastName & "')"

关于sql-server - 使用 VBA 仅将新记录插入到 SQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com