【发布时间】:2021-12-29 13:01:11
【问题描述】:
我在 VBA MS Excel 文件中有一个 3 列和 100K 行的数组。
我想将此数组传递给 SQL Server 存储过程并在存储过程中将其转换为 Tmp-table 并执行我的“事情..”
如何将数组传递给存储过程?
这是我的 VBA 数组的示例:
Col1 | Col2 | Col3
1 AAA XXX
2 BBB YYY
3 CCC ZZZ
VBA 代码:
......
Set Cmd = CreateObject("ADODB.Command")
Cmd.CommandType = 4
Cmd.NamedParameters = True
Cmd.ActiveConnection = DbConn
Cmd.CommandText = "My_SP_WithArrayParam"
''I dont know what parameters to use here:
Cmd.Parameters.Append Cmd.CreateParameter("@Arr", ??? , ?? , ??? , My_100K_Arr)
Cmd.Execute
在 SQL 方面:
Create or alter proc My_SP_WithArrayParam(
@Arr ???
)
as
begin
create table #Tbl_From_Excel (
ID int
,COL1 nvarchar(60)
,COL2 nvarchar(60)
)
---Need to insert the array to the tmp table, and I dont know the syntax
end
【问题讨论】:
-
SQL Server 没有“数组”对象类型。您要使用的是 Table Type 参数。
-
@Larnu ,好的,对于表类型我可以传递我的 VBA 数组?
-
为什么不将 json 格式的文本与数组的内容一起使用并将其作为文本传递。 Sql Server 从版本 13 开始可以处理 json。这是link 可能有用。
-
@AntonGrig - 将 100K * 3 值转换为 JSON 并将大量字符串发送到 SQL 会很慢,我测试了一种将数组转换为“插入”字符串的类似方法花了 7 分钟变成了一个字符串
-
发送 100,000 行作为表类型参数也不会有效。我闻到了 XY 问题。
标签: sql-server excel vba tsql ado