小编典典

VBA:将表格从Excel导入SQL

sql

我正在尝试使用VBA将数据表从excel导入SQL Server 2012。 最好在UDF的帮助下。

excel表看起来像这样。

TableID    2012  2011  2010  2009
row 1       11     12   13    14
row 2       21     22   23    24
row 3       31     32   33    34
etc..

(我将数字放在单元格中以指定其位置。例如11 =第1行,第1列)

数据库表看起来像这样。

Header:        id   |  year  |  row1  |  row2  |  row3  |  etc..
ExampData:  TableId    2012      11       21       31       ..
ExampData:  TableId    2011      12       22       32       ..

(这不包括“主键”列,该列可以是id和year的组合,也可以是a NEWID()


我知道如何导入特定的列,例如,我可以运行以下代码:

INSERT INTO example_table (id, year, row1, row2, row3) VALUES ('001', '2012', '11', '21', '31')

这对于单个列非常有用,但是我将如何使其适用于整个表(多个列和行)。


阅读 347

收藏
2021-04-28

共1个答案

小编典典

因此,我设法使其正常运行。这使用的是Excel 2010,SQL Sever2012。
这假定excel中的行标题与sql中的列标题相同。
这也假设表格的布局与问题类似。


要将数据从Excel导入到SQL Server(使用UDF),我们可以执行以下操作。在Excel中
创建一个Public Function

Public Function import_data(TableID, vHeader As Variant, vRow As Variant, vData As Variant)
End Function

并使用您喜欢的连接方法连接到数据库。
然后对于该INSERT语句使用以下命令:

'Declare the  variables
Dim vpush As String
Dim headerCount As Long
Dim rowTitles As String
Dim rowDatas As String
Dim i As Long

`Count the amount of columns 
headerCount = Application.CountA(vHeader)

`Create insert statement
For i = 1 To headerCount
   rowTitles = VBA.Join(WorksheetFunction.Transpose(vRow), ", ")
   rowDatas = VBA.Join(WorksheetFunction.Transpose(Application.Index(vData, , i)), "', '")
   vpush = "INSERT INTO example_table (id, " & rowTitles & ", year) VALUES ('" & TableID & "', '" & rowDatas & "', '" & vHeader(i) & "')"
Next i

别忘了.Execute (vpush)

比起您要导入表的任何时间,您都将在excel工作表中执行以下操作:

  1. 在单元格中=import_data(,然后按CTRL+ SHIFT+A
  2. 选择TableId
  3. 选择标题行(假设此处始终为年)
  4. 选择具有所有行标题的列(这将是您的sql中的标题)
  5. 选择表中的所有数据

那应该做。
(PS:如果这不是最有效的方法,或者您看到了改进。。请随时进行编辑或添加)

2021-04-28