De esta página obtuve el conocimiento principal.
En primer lugar crear 'El tipo tabla'
Yo lo veo algo así como plantillas que podremos usar muy precisamente acorde a sustipos de columnas. Y como lo que quiero es enviar una lista con los IDs seleccionadosMi tipo de tabla solo contiene una columna intCREATE TYPE IDS_TableType AS TABLE ( ID INT );
Después crear el procedimiento almacenado utilizando el tipo de tabla
recién declarado 'IDS_TableType'.
CREATE PROCEDURE SP_ReporteAgrupadoMedicos @TablaInterfaz IDS_TableType READONLY, @FechaInicio char(10), @FechaFin char(10) AS BEGIN SELECT RTRIM(paciente.Nombre) + ' ' + RTRIM(paciente.Ap_Paterno) + ' ' + RTRIM(paciente.Ap_Materno) AS Paciente, CAST((DATEDIFF(DAY,paciente.Fecha_Nacimiento,GETDATE())/365) as CHAR(3))+' años' as Edad, Procedencia=( case when i.TipoIngreso=0 then tipoIngreso.Item when i.TipoIngreso=1 then 'Empresa en convenio '+convenio.Empresa when i.TipoIngreso=2 then tipoIngreso.Item when i.TipoIngreso=3 then tipoIngreso.Item when i.TipoIngreso=4 then tipoIngreso.Item when i.TipoIngreso=5 then tipoIngreso.Item END), dbo.FN_DiagnosticosCie10(i.idPaciente,i.idIngreso) Diagnostico, i.Doctor idDoctor,RTRIM(usuario.Nombre)+SPACE(1)+RTRIM(usuario.Ap_Paterno)+SPACE(1)+ RTRIM(usuario.Ap_Materno) Medico FROM dbo.AdmIngresosPacientes AS i LEFT JOIN dbo.ExpPacientes AS paciente ON i.idPaciente = paciente.idPaciente LEFT JOIN AdmListasDesplegables tipoIngreso on tipoIngreso.id=i.TipoIngreso AND tipoIngreso.NombreLista='TipoIngreso' LEFT JOIN ExpEmpresasConvenios convenio on convenio.id=i.EmpresaConvenio LEFT JOIN ExpUsuarios as usuario on usuario.idUsuario=i.Doctor where i.FechaIngreso between +@FechaInicio+' 00:00:00' AND @FechaFin+' 23:59:59' AND Doctor IN (select id from @TablaInterfaz); END
Lo que ven es la cláusula IN mas info Aquí
Hasta aquí el procedimiento creado
-------------------------------------
Ahora para acceder a el desde SQL Server, creamo una variable tabla del tipo IDS_TableTypeque hicimos en el primer paso. Le cargamos datos con Insert y por último
mando llamar mi procedimiento almacenado enviando la tabla @LocationTVPDECLARE @LocationTVP AS IDS_TableType; INSERT INTO @LocationTVP (ID) values (1),(4),(58),(175),(176); EXEC SP_ReporteAgrupadoMedicos @LocationTVP,'10-12-2015','10-12-2015';
---------------------------------------------------------------
Y el código para hacer lo mismo desde C#. Yo estoy obteniendo de
una lista de CheckBoxes los elementos seleccionador y creando la tabla
addedCategories . Lo otro ya lo conocen y el DataTable dt esel resultado que pueden usar para llenar GridViews.
DataTable Procedimiento() { DataTable addedCategories = new DataTable(); addedCategories.Columns.Add("Id"); DataRow row; foreach (ListItem item in chkListaMedicos.Items) { if (item.Selected) { row = addedCategories.NewRow(); row[0] = item.Value; addedCategories.Rows.Add(row); } } DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter("SP_ReporteAgrupadoMedicos",con.CON); da.SelectCommand.CommandType = CommandType.StoredProcedure; da.SelectCommand.Parameters.Add("@TablaInterfaz", SqlDbType.Structured).Value=addedCategories; da.SelectCommand.Parameters.Add("@FechaInicio", SqlDbType.Char).Value = txtFechaInicio.Text; da.SelectCommand.Parameters.Add("@FechaFin", SqlDbType.Char).Value = txtFechaFin.Text; da.Fill(dt); return dt; }
No hay comentarios.:
Publicar un comentario