none
Ejecucion de Un proceso Almacenado llamado desde una Funcion RRS feed

  • Pregunta

  • Estoy haciendo una funcion para registros, pero me encuentro frente a la interrogante de como puedo llamar un procedimiento almacenado desde una funcion o de lo contrario como puedo hacer un insert desde la misa funcion

    IF NOT EXISTS (SELECT Num_control FROM Alumno WHERE Num_control = @Num_control)
    BEGIN
    SET @busqueda = (); 
    EXEC sp_executesql usp_Alumnos  @Nombre,@Ap_mat,@Ap_mat,@Genero,@Carrera,@Num_control,@Domicilio,@Telefono

    -- Este es en teoria el fragmento que no encuentro como hacer que funciones

    sábado, 4 de mayo de 2019 6:02

Respuestas

Todas las respuestas

  • Hola LRamosprog:

    No es el camino idóneo. La siguiente info es extraída directamente de la doc oficial de créate function

    Limitaciones y restricciones

    Las funciones definidas por el usuario no se pueden utilizar para realizar acciones que modifican el estado de la base de datos.

    Llamar a procedimientos almacenados extendidos desde funciones

    Cuando se llama a un procedimiento almacenado extendido desde una función, no se puede devolver al cliente el conjunto de resultados. Cualquier API ODS que devuelva conjuntos de resultados al cliente devolverá FAIL. El procedimiento almacenado extendido se puede volver a conectar a una instancia de SQL Server; sin embargo, no debería intentar combinar la misma transacción como la función que invocó el procedimiento almacenado extendido.

    https://docs.microsoft.com/es-es/sql/t-sql/statements/create-function-transact-sql?view=sql-server-2017

    No obstante existen ciertas trampas posibles, para saltarse estas restricciones.

    https://stackoverflow.com/questions/6150888/insert-update-delete-with-function-in-sql-server

    sábado, 4 de mayo de 2019 6:33
  • Gracias Javi, lo checare.
    domingo, 5 de mayo de 2019 1:24
  • SQL Server tiene una limitación importante en las funciones: Siempre son de solo-lectura. Está prohibido que una función modifique el estado de la base de datos. Por lo tanto, no se puede hacer un Insert desde una función. Y tampoco se puede llamar a un procedimiento almacenado, porque en principio el procedimiento podría hacer "cualquier cosa" sin que la función lo sepa, y por lo tanto el sistema prohíbe llamar al procedimiento para evitar el riesgo de que haga modificaciones y garantizar que la función siga siendo de solo lectura.
    domingo, 5 de mayo de 2019 17:46