Quelqu'un peut-il expliquer quelle est la différence exacte entre les procédures stockées et les fonctions définies par l'utilisateur, et dans quel contexte chacune est utile?
C'est ce que je garde toujours à l'esprit :)
Source http://www.codeproject.com/Tips/286539/Difference-between-stored-procedure-and-function
Une fonction renvoie toujours une valeur et ne peut pas effectuer des instructions DML (INSERT/UPDATE/DELETE).
Une procédure stockée ne peut pas renvoyer de valeur (vous devez utiliser un paramètre OUT) et peut exécuter des instructions DML.
Mis à part la comparaison ci-dessus, ils sont égaux. Toutefois, étant donné la comparaison, il est probable que vous utiliserez une procédure stockée plus souvent qu'une fonction, en fonction de vos tâches.
La fonction définie par l'utilisateur a peu de limitations, comme les instructions DML peuvent être utilisées, etc.
Différences:
Les procédures peuvent accepter les paramètres de type entrée (par défaut), sortie et entrée. Les fonctions ne peuvent accepter que les paramètres de type d'entrée.
Les procédures peuvent ou non renvoyer une valeur ou peuvent renvoyer plusieurs valeurs à l'aide des paramètres OUTPUT et/ou INOUT. Une procédure peut renvoyer jusqu'à 1024 valeurs via les paramètres OUTPUT et/ou INOUT ..__ La fonction ne renvoie toujours qu'une valeur.
La procédure stockée renvoie toujours la valeur entière par défaut, zéro. Le type de retour de fonction peut être scalaire ou table ou des valeurs de table.
Les procs stockés peuvent créer une table mais ne peuvent pas renvoyer de table. Les fonctions peuvent créer, mettre à jour et supprimer la variable de table. Il peut retourner une table
Les procédures stockées peuvent affecter l'état de la base de données en utilisant les opérations d'insertion, de suppression, de mise à jour et de création. Les fonctions ne peuvent pas affecter l'état de la base de données, ce qui signifie que nous ne pouvons pas effectuer d'opérations d'insertion, de suppression, de mise à jour et de création d'opérations sur la base de données.
Les procédures stockées sont stockées dans une base de données sous la forme compilée. Les fonctions sont analysées et compilées uniquement à l'exécution.
Les procs stockés peuvent être appelés indépendamment en utilisant le mot clé exec. La procédure stockée ne peut pas être utilisée dans la clause select/where/having. Les fonctions sont appelées à partir de la clause select/where/having. Même nous pouvons joindre deux fonctions.
Normalement, une procédure stockée sera utilisée pour effectuer des tâches spécifiques . Des fonctions seront utilisées pour calculer une valeur. La procédure stockée permet d’obtenir getdate () ou d’autres fonctions non déterministes. La fonction n’autorisera pas les fonctions non déterministes telles que getdate ().
Dans les procédures stockées, nous pouvons utiliser des instructions de transaction. Nous ne pouvons pas utiliser dans les fonctions.
Les procédures stockées peuvent effectuer toutes les opérations DML, telles que l'insertion du nouvel enregistrement, la mise à jour des enregistrements et la suppression des enregistrements existants. La fonction ne nous permet pas d’effectuer les opérations DML dans les tables de base de données comme dans la procédure stockée. Cela nous permet de ne faire que l'opération select. Cela ne permettra pas de faire le DML sur des tables existantes. Néanmoins, nous ne pouvons effectuer l'opération DML que sur la variable de table à l'intérieur des fonctions définies par l'utilisateur.
Des tables temporaires (dérivées) peuvent être créées dans des procédures stockées. Ce n'est pas possible dans le cas de fonctions.
Lorsque les instructions SQL rencontrent une erreur, T-SQL ignore cette erreur dans un SPROC et passe à l'instruction suivante du code restant. Dans le cas de fonctions, T-SQL arrêtera l'exécution des prochaines instructions.
Référer ce lien: