Sql 从Excel工作簿中选择不在Access表中的数据
我有一个访问表。这些字段与Excel工作簿的字段匹配。Access表包含Excel工作表中没有的一些记录,反之亦然。然而,有一些重叠。例如: 查阅表1Sql 从Excel工作簿中选择不在Access表中的数据,sql,excel,ms-access,Sql,Excel,Ms Access,我有一个访问表。这些字段与Excel工作簿的字段匹配。Access表包含Excel工作表中没有的一些记录,反之亦然。然而,有一些重叠。例如: 查阅表1 ID Name Attribute 1 Canada A 2 USA B 3 Mexico A 胜过 Excel中存在但Access中没有的数据应添加到Access表中。预期产出: ID Name Attribute 1
ID Name Attribute
1 Canada A
2 USA B
3 Mexico A
胜过
Excel中存在但Access中没有的数据应添加到Access表中。预期产出:
ID Name Attribute
1 Canada A
2 USA B
3 Mexico A
4 France B
现在,我在Excel工作表上打开一个记录集。我想执行一个类似于
INSERT INTO Table1 (Name, Attribute)
SELECT (Name, Attribute) FROM Recordset
WHERE (Name, Attribute) NOT IN
(SELECT Name, Attribute FROM Table1)
在Access中是否可以这样做?如何引用我的记录集?以下是导致问题的代码:
Sub openWorksheet()
Dim cn As New ADODB.Connection
Dim rs1 As New ADODB.Recordset
Dim strQuery As String
Dim lastRowIndex As Long
Dim i As Integer
Dim wbPath As String
Dim db As DAO.Database
Dim rs2 As DAO.Recordset
wbPath = "C:\Users\david.grandmaison\Desktop\RISE\Rise_Template.xlsx"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & wbPath & ";" & _
"Extended Properties=Excel 12.0;"
strQuery = "SELECT Dist_Ret_Door_ID FROM [Sheet1$]"
rs1.Open strQuery, cn
Set db = CurrentDb
strQuery = "This is what I'm trying to write"
db.Execute strQuery
我知道我可以在Excel记录集上循环并逐个检查每个记录,如果它不存在,则添加它,但我正在寻找单个插入,因为循环将花费太长时间。但是,如果我错了,或者没有办法避免,请告诉我。无法在查询中使用记录集。听起来您应该能够设置到Excel工作表的链接,然后将链接的工作表视为一个表(不能编辑数据除外)。然后您可以搜索主题“SQL Upsert”。使用创建到Excel工作表的链接,就像它是一个Access表一样。然后,您可以在SQLServer中使用它,而不能在查询中使用记录集。听起来您应该能够设置到Excel工作表的链接,然后将链接的工作表视为一个表(不能编辑数据除外)。然后您可以搜索主题“SQL Upsert”。使用创建到Excel工作表的链接,就像它是一个Access表一样。然后可以在SQL中使用它
Sub openWorksheet()
Dim cn As New ADODB.Connection
Dim rs1 As New ADODB.Recordset
Dim strQuery As String
Dim lastRowIndex As Long
Dim i As Integer
Dim wbPath As String
Dim db As DAO.Database
Dim rs2 As DAO.Recordset
wbPath = "C:\Users\david.grandmaison\Desktop\RISE\Rise_Template.xlsx"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & wbPath & ";" & _
"Extended Properties=Excel 12.0;"
strQuery = "SELECT Dist_Ret_Door_ID FROM [Sheet1$]"
rs1.Open strQuery, cn
Set db = CurrentDb
strQuery = "This is what I'm trying to write"
db.Execute strQuery