我正在尝试使用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的组合,也可以是NEWID()
)
我知道如何导入特定列,例如我可以运行以下代码:
INSERT INTO example_table (id, year, row1, row2, row3) VALUES ('001', '2012', '11', '21', '31')
这适用于单个列,但我如何才能使其适用于整个表(多列和多行)。
答案 0 :(得分:3)
所以我设法让它运转起来。这是使用Excel 2010,SQL Sever 2012 这假设excel中的行标题与sql中的列标题相同 这也假定了问题帖子中的表格的类似布局。
要将数据从Excel导入SQL服务器,使用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工作表中执行以下操作:
=import_data(
中,按CTRL
+ SHIFT
+ A
应该这样做。
(P.S.如果这不是最有效的方式,或者你看到改进......随意编辑或添加)
答案 1 :(得分:2)
如果您使用的是SQL Server 2008或更高版本,则可以在INSERT语句中添加多行:
INSERT INTO example_table (id, year, row1, row2, row3)
VALUES ('001', '2012', '11', '21', '31'),
('002', '2012', '12', '22', '32'),
('003', '2012', '13', '23', '33')
根据您的电子表格的大小,您可以在一个大型INSERT或一些较小的INSERT中执行此操作。