0% encontró este documento útil (0 votos)
299 vistas4 páginas

Enviar ParamArray A Un Stored Procedure en SQL Server

Este documento describe cómo enviar múltiples valores de parámetros a un procedimiento almacenado en SQL Server mediante el uso de tablas definidas por el usuario. Se crea un tipo de tabla, un procedimiento almacenado que inserta los datos de la tabla de parámetros en otra tabla, y se muestran ejemplos de cómo enviar los datos desde C# y VB.NET a SQL Server usando este enfoque.

Cargado por

Lidubina Blandon
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • Modificación de tipos,
  • Filtrado de datos,
  • Errores comunes,
  • Uso de parámetros,
  • Uso de variables,
  • Comandos SQL,
  • Stored Procedure,
  • Programación orientada a objet…,
  • Ejecución de transacciones,
  • Columnas calculadas
0% encontró este documento útil (0 votos)
299 vistas4 páginas

Enviar ParamArray A Un Stored Procedure en SQL Server

Este documento describe cómo enviar múltiples valores de parámetros a un procedimiento almacenado en SQL Server mediante el uso de tablas definidas por el usuario. Se crea un tipo de tabla, un procedimiento almacenado que inserta los datos de la tabla de parámetros en otra tabla, y se muestran ejemplos de cómo enviar los datos desde C# y VB.NET a SQL Server usando este enfoque.

Cargado por

Lidubina Blandon
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • Modificación de tipos,
  • Filtrado de datos,
  • Errores comunes,
  • Uso de parámetros,
  • Uso de variables,
  • Comandos SQL,
  • Stored Procedure,
  • Programación orientada a objet…,
  • Ejecución de transacciones,
  • Columnas calculadas

1

Enviar ParamArray a un Stored Procedure en SQL Server


Una de las caractersticas que siempre consider necesaria en versiones anteriores a SQL Server 2008 y otros motores comerciales era la capacidad de recibir una coleccin de datos como parmetro INPUT, as como manejan desde hace bastante tiempo Oracle y PostgreSQL. El ttulo que he puesto es algo engaoso, pero lo redact as para llegar con mayor facilidad desde los buscadores. La verdad no existe un tipo de dato Array o Collection dentro de SQL Server hasta hoy da, pero si es posible enviar N valores de una sola vez, incluso mejora conceptualmente al tpico paramArray porque al ser un tipo de tabla, puede recibir filas y columnas como valores. Para ello debemos contar con la versin 2008 o superior de SQL Server y explotar la caracterstica Tipos de tablas definidos por el usuario. Para nuestro ejemplo crearemos una pequea tabla que contendr 3 columnas (una int y 2 varchar)
CREATE TYPE [dbo].[testParam] AS TABLE( [id] [int] NOT NULL, [val1] [varchar](50) NULL, [val2] [varchar](50) NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (IGNORE_DUP_KEY = OFF) ) GO

Luego creamos una tabla con fines de demostracin, aqu depositaremos todos los datos que se le enve al parmetro input
CREATE TABLE [dbo].[testing]( [id] [int] NOT NULL, [val1] [varchar](50) NOT NULL, [var2] [varchar](50) NOT NULL, CONSTRAINT [PK_testing] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

El procedimiento almacenado ira as


create procedure test @param testParam readonly as insert into [Link] select * from @param;

Con esa tabla ya se puede hacer lo que deseen, en el ejemplo hacemos un INSERT INTO SELECT bsico. Para invocarlo desde el mismo SQL simplemente podemos hacer esto
declare @par testParam insert into @par insert into @par insert into @par VALUES (1, 'Manuela','Vera') VALUES (2, 'Josefa','Medina') VALUES (3, 'Pablo','Garmendia')

execute [Link] @param = @par select * from [Link]

La pregunta que muchos se harn y cmo programo desde la aplicacin cliente? Muy sencilla es la implementacin, ms de lo que parece. Veamos dos ejemplo, con C# y [Link] respectivamente. Ejemplo de implementacin con C#
try { var dataTable = new DataTable(); [Link]("Id", typeof(int)); [Link]("val1", typeof(string)); [Link]("val2", typeof(string)); [Link](1, "Jose", "Rodriguez"); [Link](2, "Mara", "Benitez"); [Link](3, "Marcela", "Troche"); using (var conn = new SqlConnection("Server=[Link];Initial Catalog=devtroce;user ID=devtroce;password=*********")) { using (var cmd = new SqlCommand("test", conn)) { [Link] = [Link]; [Link]("@param", dataTable); [Link](); [Link](); [Link]("guardado con xito"); } } }

3
catch(Exception ex) { [Link]([Link]); }

Ejemplo de implementacin con Visual Basic .Net


Try Dim dataTable As New DataTable() [Link]("Id", [Link]("System.Int32")) [Link]("val1", [Link]("[Link]")) [Link]("val2", [Link]("[Link]")) [Link](1, "Jose", "Rodriguez") [Link](2, "Mara", "Benitez") [Link](3, "Marcela", "Troche") Using conn As New SqlConnection("Server=[Link];Initial Catalog=devtroce;user ID=devtroce;password=*********") Using cmd As New SqlCommand("test", conn) [Link] = [Link] [Link]("@param", dataTable) [Link]() [Link]() [Link]("Operacion Exitosa") End Using End Using Catch ex As Exception [Link]([Link]) End Try

Finalmente pueden hacer


select * from [Link] go

y vern que las tres filas han sido almacenados con 1 sola instruccin INSERT. Esto podemos utilizarlos en varios escenarios, el ms tpico sera cuando manejamos datos de cabecera-detalle (master-detail), tpicos de los sistemas de facturacin y otros. Algunos puntos a tener en cuenta al utilizar ste objeto son los que siguen, recomiendo que lo lean para evitarse sorpresas en el futuro. Los tipos de tabla definidos por el usuario tienen las restricciones siguientes:

Un tipo de tabla definido por el usuario no se puede utilizar como columna en una tabla o como campo en un tipo estructurado definido por el usuario. Tipos de alias basados en un tipo de tabla definido por el usuario No se permite la opcin [NOT FOR REPLICATION]. Las restricciones CHECK exigen que las columnas calculadas sean PERSISTED. La clave principal en las columnas calculadas deben ser PERSISTED y NOT NULL.

No es posible crear ndices no agrupados en un tipo de tabla definido por el usuario a menos que el ndice sea el resultado de crear una restriccin PRIMARY KEY o UNIQUE en el tipo de tabla definido por el usuario. (SQL Server exige cualquier restriccin UNIQUE o PRIMARY KEY por medio del uso de un ndice). No es posible modificar la definicin de un tipo de la tabla definida por el usuario una vez creado. No es posible llamar a las funciones definidas por el usuario dentro de la definicin de columnas calculadas de un tipo de tabla definido por el usuario.

También podría gustarte