es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

VBA ADO pasar parámetro de matriz a procedimiento almacenado

Tengo un array con 3 columnas y 100K de filas en un archivo VBA MS Excel.

Quiero pasar este array a un Stored Procedure de SQL Server y en el Stored Procedure convertirlo a una tabla temporal para hacer mis “cosas..”

¿Cómo paso un array a un Stored Procedure?

Este es un ejemplo de mi array en VBA:

Col1 | Col2 | Col3
1 AAA XXX
2 BBB YYY
3 CCC ZZZ

El código VBA:

……

Set Cmd = CreateObject(“ADODB.Command”)

Cmd.CommandType = 4
Cmd.NamedParameters = True
Cmd.ActiveConnection = DbConn
Cmd.CommandText = “My_SP_WithArrayParam”

”No sé qué parámetros usar aquí:
Cmd.Parameters.Append Cmd.CreateParameter(“@Arr”, ??? , ?? , ??? , My_100K_Arr)

Cmd.Execute

Y en el lado SQL:

Create or alter proc My_SP_WithArrayParam(
@Arr ???
)
as
begin
create table #Tbl_From_Excel (
ID int
,COL1 nvarchar(60)
,COL2 nvarchar(60)
)

---Necesito ingresar el array en la tabla temporal, y no conozco la sintaxis

end

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Se puede pasar una matriz a un procedimiento almacenado utilizando un parámetro de tipo “table-valued”. En el código VBA se puede crear un parámetro de tipo “adVariant” y establecer la propiedad “Value” en la matriz. En el lado SQL, se puede declarar el parámetro como un parámetro de tipo “table-valued” y utilizar la instrucción “INSERT INTO” para insertar la matriz en la tabla temporal.

    El código VBA se vería así:

    ......
    
    Set Cmd = CreateObject("ADODB.Command")
    
    Cmd.CommandType = 4 
    Cmd.NamedParameters = True
    Cmd.ActiveConnection = DbConn
    Cmd.CommandText = "My_SP_WithArrayParam"
    
    Cmd.Parameters.Append Cmd.CreateParameter("@Arr", adVariant, adParamInput, , My_100K_Arr)
    
    Cmd.Execute
    

    Y en el lado SQL:

    Create or alter proc My_SP_WithArrayParam(
                                                @Arr dbo.MyTableType READONLY
                                                )
    as 
    begin
        create table #Tbl_From_Excel (
                                    ID int
                                    ,COL1 nvarchar(60)
                                    ,COL2 nvarchar(60)
                                    )
    
        INSERT INTO #Tbl_From_Excel
        SELECT * FROM @Arr
    
    end
    

Comments are closed.