Principales respuestas
¿Es posible modificar un procedimiento almacenado en tiempo de ejecución?

Pregunta
-
Respuestas
-
Hola Ángelroso:
Como te ha indicado Alberto, solo tienes que enviar al SQL Server el Alter en un executeNonQuery y ya dispondrás del procedimiento desde ese momento modificado.
ALTER PROCEDURE [G_AYUNTAMIENTOS].[dbo].[paPendientesCAñadir] @vIDAYUNTAMIENTO INTEGER, @vC2007 BIT, @vC2008 BIT, @vC2009 BIT, @vC2010 BIT, @vC2011 BIT, @vC2012 BIT, @vC2013 BIT, @vC2014 BIT, @vC2015 BIT, @vC2016 BIT, @vC2017 BIT, @vC2018 BIT, @vC2019 BIT, @vC2020 BIT, @vC2021 BIT, @vC2022 BIT, @vC2023 BIT, @vC2024 bit, /*campo añadido*/ @vIDPENDIENTEC INTEGER AS INSERT INTO PENDIENTESCOBRO(IDAYUNTAMIENTO,C2007,C2008,C2009,C2010,C2011,C2012,C2013,C2014, C2015,C2016,C2017,C2018,C2019,C2020,C2021,C2022,C2023,C2024,IDPENDIENTEC) VALUES (@vIDAYUNTAMIENTO,@vC2007,@vC2008,@vC2009,@vC2010,@vC2011,@vC2012,@vC2013,@vC2014, @vC2015,@vC2016,@vC2017,@vC2018,@vC2019,@vC2020,@vC2021,@vC2022,@vC2023,@vC2024,@vIDPENDIENTEC) RETURN
Otra cosa, es que el código se alimente de tu tabla y cambie en tiempo de ejecución.
En eso, me parece, que va a ser bastante (por no decir muchísimo) más dificil. En mi opinión.
Si utilizas Entity Framework, es posible cambiar los objetos, agregandoles propiedades, directamente, pero no en tiempo de ejecución.
Entity Framework DataBase First:
Execute non query Ado.Net:
https://docs.microsoft.com/es-es/dotnet/framework/data/adonet/using-commands-to-modify-data
Saludos
- Propuesto como respuesta Sergio Parra lunes, 19 de noviembre de 2018 18:31
- Marcado como respuesta Ángelroso lunes, 19 de noviembre de 2018 23:20
-
Hola.
Reitero las gracias por tu atención.
Efectivamente, Alberto ya había indicado lo del procedimiento almacenado y como me temía, lo demás, tal y como me comentas y que tenía casi la seguridad es prácticamente imposible.
Buscaré otras opciones.
Saludos
- Marcado como respuesta Pablo Rubio lunes, 19 de noviembre de 2018 20:09
Todas las respuestas
-
Hola Algelroso:
Es posible que existan soluciones a tu incidencia, pero para eso lo mejor es que la detalles, ya que sino, los que leen tu solicitud, no pueden saber lo que quieres.
Plasma tu procedimiento almacenado y di exactamente lo que quisieras, que hiciera, y seguro que encontramos una solución satisfactoria.
Un saludo
-
Sí, es posible modificar un procedimiento almacenado en tiempo de ejecución. Simplemente transmites al servidor un comando "ALTER PROCEDURE..." con la nueva definición usando un ExecuteNonQuery y, si el programa llamante tiene suficientes permisos, el procedimiento se sustituye. Ojo, si en ese momento el procedimiento estaba ejecutándose, no se altera la ejecución en curso, solo afecta a posteriores llamadas que se hagan al procedimiento.
- Propuesto como respuesta Sergio Parra lunes, 19 de noviembre de 2018 18:31
-
Muchas gracias por vuestro interés.
Uno de los procedimientos almacenados, el de insertar, es el siguiente:
USE [G_AYUNTAMIENTOS] GO /****** Object: StoredProcedure [dbo].[paPendientesCAñadir] Script Date: 19/11/2018 13:48:43 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[paPendientesCAñadir] @vIDAYUNTAMIENTO INTEGER, @vC2007 BIT, @vC2008 BIT, @vC2009 BIT, @vC2010 BIT, @vC2011 BIT, @vC2012 BIT, @vC2013 BIT, @vC2014 BIT, @vC2015 BIT, @vC2016 BIT, @vC2017 BIT, @vC2018 BIT, @vC2019 BIT, @vC2020 BIT, @vC2021 BIT, @vC2022 BIT, @vC2023 BIT, @vIDPENDIENTEC INTEGER AS INSERT INTO PENDIENTESCOBRO(IDAYUNTAMIENTO,C2007,C2008,C2009,C2010,C2011,C2012,C2013,C2014, C2015,C2016,C2017,C2018,C2019,C2020,C2021,C2022,C2023,IDPENDIENTEC) VALUES (@vIDAYUNTAMIENTO,@vC2007,@vC2008,@vC2009,@vC2010,@vC2011,@vC2012,@vC2013,@vC2014, @vC2015,@vC2016,@vC2017,@vC2018,@vC2019,@vC2020,@vC2021,@vC2022,@vC2023,@vIDPENDIENTEC)
Se trata de en su momento añadir un nuevo ejercicio, el C2024 y quisiera si es posible modificar en tiempo de ejecución el procedimiento almacenado y ya el código correspondiente a las diferentes capas: Datos, Entidades y Presentación.
Muchas gracias nuevamente.
Saludos.
-
Hola Ángelroso:
Como te ha indicado Alberto, solo tienes que enviar al SQL Server el Alter en un executeNonQuery y ya dispondrás del procedimiento desde ese momento modificado.
ALTER PROCEDURE [G_AYUNTAMIENTOS].[dbo].[paPendientesCAñadir] @vIDAYUNTAMIENTO INTEGER, @vC2007 BIT, @vC2008 BIT, @vC2009 BIT, @vC2010 BIT, @vC2011 BIT, @vC2012 BIT, @vC2013 BIT, @vC2014 BIT, @vC2015 BIT, @vC2016 BIT, @vC2017 BIT, @vC2018 BIT, @vC2019 BIT, @vC2020 BIT, @vC2021 BIT, @vC2022 BIT, @vC2023 BIT, @vC2024 bit, /*campo añadido*/ @vIDPENDIENTEC INTEGER AS INSERT INTO PENDIENTESCOBRO(IDAYUNTAMIENTO,C2007,C2008,C2009,C2010,C2011,C2012,C2013,C2014, C2015,C2016,C2017,C2018,C2019,C2020,C2021,C2022,C2023,C2024,IDPENDIENTEC) VALUES (@vIDAYUNTAMIENTO,@vC2007,@vC2008,@vC2009,@vC2010,@vC2011,@vC2012,@vC2013,@vC2014, @vC2015,@vC2016,@vC2017,@vC2018,@vC2019,@vC2020,@vC2021,@vC2022,@vC2023,@vC2024,@vIDPENDIENTEC) RETURN
Otra cosa, es que el código se alimente de tu tabla y cambie en tiempo de ejecución.
En eso, me parece, que va a ser bastante (por no decir muchísimo) más dificil. En mi opinión.
Si utilizas Entity Framework, es posible cambiar los objetos, agregandoles propiedades, directamente, pero no en tiempo de ejecución.
Entity Framework DataBase First:
Execute non query Ado.Net:
https://docs.microsoft.com/es-es/dotnet/framework/data/adonet/using-commands-to-modify-data
Saludos
- Propuesto como respuesta Sergio Parra lunes, 19 de noviembre de 2018 18:31
- Marcado como respuesta Ángelroso lunes, 19 de noviembre de 2018 23:20
-
Hola.
Reitero las gracias por tu atención.
Efectivamente, Alberto ya había indicado lo del procedimiento almacenado y como me temía, lo demás, tal y como me comentas y que tenía casi la seguridad es prácticamente imposible.
Buscaré otras opciones.
Saludos
- Marcado como respuesta Pablo Rubio lunes, 19 de noviembre de 2018 20:09