从VBA批量插入SQL Server

时间:2014-08-28 10:09:30

标签: sql-server-2008 vba ado

我正在使用SQL Server 2008 R2并且我创建了一个用户定义类型:

create type dbo.UDT as table (FirstName varchar(50) null, LastName varchar(50) null)

我创建了一个将此UDT作为参数的存储过程:

create procedure dbo.InsertIntoMyTableUsingUDT (@udt dbo.UDT readonly)
as
begin
    set nocount on;
    insert into dbo.MyTable (FirstName, LastName)
    select FirstName, LastName from @udt;
    return;
end

我想使用VBA的ADO(ADO.COM/OLE数据库)使用此存储过程批量上传10,000多条记录。
我已经尝试将ADODB.Recordset作为参数传递给ADODB.Command:

<code that creates ADODB.Recordset 'rst' here...>

Dim com as ADODB.Command
Set com = new ADODB.Command
With com
    .ActiveConnection = "Provider=SQLOLEDB.1;Data Source=localhost;Initial Catalog=TestDB;Integrated Security=SSPI;"
    .CommandText = "dbo.InsertIntoMyTableUsingUDT"
    .CommandType = adCmdStoredProc
    .Parameters.Refresh
    .Parameters(1).Value = rst '<----the ADODB.Recordset created above
    .Execute
End With

但是我得到了运行时错误:

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

在立即窗口中检查参数的类型我得到:

?com.Parameters(1).Type
143

我在MSFT的OLE DB DataTypeEnums列表中看不到:

http://msdn.microsoft.com/en-gb/library/windows/desktop/ms675318(v=vs.85).aspx

所以我尝试传入一个二维数组而不是ADODB.Recordset,但后来我得到了错误:

Bad variable type.

两次尝试都失败了,这让我感到难过 我知道可以使用ADO.NET和SqlParameterCollection.AddWithValue方法在VB.NET中完成。
我想知道是否有一种方法可以使用ADO.COM在VBA中执行此操作。有人做过吗? 或者,是否有不同的方法来实现相同的功能(批量上传,而不是在循环中调用ADODB.Command 10,000次以上)?
干杯

0 个答案:

没有答案