165 votes

Quelle est la différence entre une procédure stockée et une vue ?

Je suis confus au sujet de quelques points :

  1. Quelle est la différence entre une procédure stockée et une vue?

  2. Quand devrais-je utiliser des procédures stockées et quand devrais-je utiliser des vues dans SQL Server?

  3. Les vues permettent-elles la création de requêtes dynamiques où l'on peut passer des paramètres?

  4. Laquelle est la plus rapide, et sur quelle base l'une est-elle plus rapide que l'autre?

  5. Les vues ou les procédures stockées allouent-elles de la mémoire de manière permanente?

  6. Que signifie-t-il si quelqu'un dit que les vues créent une table virtuelle, tandis que les procédures créent une table matérielle?

Veuillez me faire savoir s'il y a d'autres points à aborder.

0 votes

Il est étonnant que aucune des réponses ci-dessous ne semble complète.

170voto

Patrick Points 3083

Une vue représente une table virtuelle. Vous pouvez joindre plusieurs tables dans une vue et utiliser la vue pour présenter les données comme si les données provenaient d'une seule table.

Une procédure stockée utilise des paramètres pour effectuer une fonction... qu'il s'agisse de mettre à jour et d'insérer des données, ou de renvoyer des valeurs uniques ou des ensembles de données.

Création de vues et de procédures stockées - contient des informations de Microsoft sur quand et pourquoi utiliser chacune.

Supposons que j'ai deux tables :

  • tbl_user, avec les colonnes : user_id, user_name, user_pw
  • tbl_profile, avec les colonnes : profile_id, user_id, profile_description

Donc, si je me retrouve à interroger ces tables de manière RÉPÉTÉE... au lieu de faire la jointure dans CHAQUE requête SQL, je définirais une vue comme suit :

CREATE VIEW vw_user_profile
AS
  SELECT A.user_id, B.profile_description
  FROM tbl_user A LEFT JOIN tbl_profile B ON A.user_id = b.user_id
GO

Ainsi, si je veux interroger profile_description par user_id à l'avenir, je n'aurai qu'à faire :

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

Ce code pourrait être utilisé dans une procédure stockée comme suit :

CREATE PROCEDURE dbo.getDesc
    @ID int
AS
BEGIN
    SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

Donc, plus tard, je pourrais appeler :

dbo.getDesc 25

et j'obtiendrai la description pour user_id 25, où le 25 est votre paramètre.

Il y a évidemment beaucoup plus de détails, c'est juste l'idée de base.

2 votes

Mais je peux joindre plusieurs tables dans une procédure stockée également où je n'ai pas à donner de paramètre.

7 votes

Mais POURQUOI voudriez-vous faire cela? quel est votre objectif? Vous pouvez utiliser une vue COMME une table... les procédures stockées sont destinées à FAIRE des choses... les vues sont là pour faciliter votre vie.

1 votes

Pensez à une vue comme une requête stockée, donc si vous avez deux tables que vous trouvez que vous devez souvent joindre pour effectuer des tâches, vous pouvez créer une vue sur laquelle travailler pour ne pas avoir à les joindre tout le temps.

136voto

cusimar9 Points 2540

Beaucoup d'informations disponibless ici

Voici un bon résumé :

Une procédure stockée :

  • Accepte des paramètres
  • NE peut PAS être utilisée comme bloc de construction dans une requête plus grande
  • Peut contenir plusieurs instructions, boucles, SI SINON, etc.
  • Peut effectuer des modifications sur une ou plusieurs tables
  • NE peut PAS être utilisée comme cible d'une instruction INSERT, UPDATE ou DELETE

Une vue :

  • NE peut PAS accepter de paramètres
  • Peut être utilisée comme bloc de construction dans une requête plus grande
  • Ne peut contenir qu'une seule requête SELECT
  • NE peut PAS effectuer de modifications sur une quelconque table
  • Mais peut (parfois) être utilisée comme cible d'une instruction INSERT, UPDATE ou DELETE

7 votes

Aussi, les vues ne doivent pas contenir de clauses "order by" ou "top"

3 votes

Que signifie "ne peut PAS être utilisé comme cible d'une instruction INSERT, UPDATE ou DELETE"? Ne pouvons-nous pas utiliser INSERT, DELETE, UPDATE dans une procédure stockée?

0 votes

"Une vue, n'accepte PAS de paramètres", ce n'est pas vrai? La vidéo par exemple: youtube.com/watch?v=zK-mWjUxKpw

8voto

Mahesh Points 1317

Tout d'abord, vous devez comprendre que ce sont deux choses différentes. Stored Procedures sont mieux utilisées pour les instructions INSERT-UPDATE-DELETE. Alors que les Vues sont utilisées pour les instructions SELECT. Vous devriez utiliser les deux.

Dans les vues, vous ne pouvez pas modifier les données. Certains bases de données ont des Vues modifiables où vous pouvez utiliser INSERT-UPDATE-DELETE sur les Vues.

2 votes

Vous pouvez modifier les données dans la table sous-jacente en utilisant des Vues. Les Vues sont mises à jour.

7voto

reggie Points 4868

Une vue SQL est une table virtuelle, basée sur une requête SQL SELECT. Une vue fait référence à une ou plusieurs tables de base de données existantes ou à d'autres vues. Il s'agit d'un instantané de la base de données tandis qu'une procédure stockée est un groupe d'instructions Transact-SQL compilées dans un seul plan d'exécution.

La vue permet de simplement afficher les données stockées dans les tables de base de données tandis qu'une procédure stockée est un groupe d'instructions pouvant être exécutées.

Une vue est plus rapide car elle affiche les données des tables référencées tandis qu'une procédure stockée exécute des requêtes SQL.

Vérifiez cet article : Vue vs Procédures stockées. Exactement ce que vous recherchez

5voto

Aaron Digulla Points 143830

Une vue est un moyen simple d'enregistrer une SELECT complexe dans la base de données.

Une procédure stockée est utilisée lorsque le SQL simple ne suffit pas. Les procédures stockées contiennent des variables, des boucles et des appels à d'autres procédures stockées. Il s'agit d'un langage de programmation, pas d'un langage de requête.

  1. Les vues sont statiques. Pensez à elles comme à de nouvelles tables avec une mise en page spécifique et les données qu'elles contiennent sont créées à la volée à l'aide de la requête avec laquelle vous les avez créées. Comme avec n'importe quelle table SQL, vous pouvez les trier et les filtrer avec les WHERE, GROUP BY et ORDER BY.

  2. Cela dépend de ce que vous faites.

  3. Cela dépend de la base de données. Les vues simples exécutent simplement la requête et filtrent le résultat. Mais des bases de données comme Oracle permettent de créer une vue "matérialisée" qui est essentiellement une table mise à jour automatiquement lorsque les données sous-jacentes de la vue changent.

    Une vue matérialisée vous permet de créer des index sur les colonnes de la vue (en particulier sur les colonnes calculées qui n'existent nulle part ailleurs dans la base de données).

  4. Je ne comprends pas de quoi tu parles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X