我正在尝试使用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())
NEWID()
我知道如何导入特定的列,例如,我可以运行以下代码:
INSERT INTO example_table (id, year, row1, row2, row3) VALUES ('001', '2012', '11', '21', '31')
这对于单个列非常有用,但是我将如何使其适用于整个表(多个列和行)。
因此,我设法使其正常运行。这使用的是Excel 2010,SQL Sever2012。 这假定excel中的行标题与sql中的列标题相同。 这也假设表格的布局与问题类似。
要将数据从Excel导入到SQL Server(使用UDF),我们可以执行以下操作。在Excel中 创建一个Public Function:
Public Function
Public Function import_data(TableID, vHeader As Variant, vRow As Variant, vData As Variant) End Function
并使用您喜欢的连接方法连接到数据库。 然后对于该INSERT语句使用以下命令:
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)。
.Execute (vpush)
比起您要导入表的任何时间,您都将在excel工作表中执行以下操作:
=import_data(
CTRL
SHIFT
A
那应该做。 (PS:如果这不是最有效的方法,或者您看到了改进。。请随时进行编辑或添加)