Llevo un tiempo aprendiendo funciones y procedimientos almacenados, pero no sé por qué y cuándo debo usar una función o un procedimiento almacenado. Me parecen iguales, tal vez porque soy un poco novato en eso.
¿Puede alguien decirme por qué?
Las funciones son valores calculados y no pueden realizar cambios permanentes en el entorno de SQL Server (es decir, no se permiten sentencias INSERT o UPDATE).
Una función puede utilizarse en línea en las sentencias SQL si devuelve un valor escalar, o puede unirse a ella si devuelve un conjunto de resultados.
Un punto que merece la pena destacar de los comentarios, que resumen la respuesta. Gracias a @Sean K Anderson:
Las funciones siguen la definición de la ciencia informática en el sentido de que DEBEN devolver un valor y no pueden alterar los datos que reciben como parámetros
(los argumentos). Las funciones no pueden modificar nada, deben tener al menos un parámetro, y deben devolver un valor. Los procs almacenados en los procs no tienen que tener un parámetro, pueden cambiar objetos de la base de datos y no tienen que devolver un valor.
Escriba una función definida por el usuario cuando quiera calcular y devolver un valor para utilizarlo en otras sentencias SQL; escriba un procedimiento almacenado cuando quiera, en cambio, agrupar un conjunto posiblemente complejo de sentencias SQL. Después de todo, son dos casos de uso bastante diferentes.
Para decidir cuándo utilizar lo que los siguientes puntos podrían ayudar-
Los procedimientos almacenados no pueden devolver una variable de tabla, mientras que las funciones sí pueden hacerlo.
Saludos