Je suis confus sur quelques points:
Quelle est la différence entre une procédure stockée et une vue?
Quand dois-je utiliser des procédures stockées et quand dois-je utiliser des vues dans SQL Server?
Les vues permettent-elles la création de requêtes dynamiques où nous pouvons passer des paramètres?
Lequel est le plus rapide et sur quelle base l'un est-il plus rapide que l'autre?
Les vues ou les procédures stockées allouent-elles de la mémoire de manière permanente?
Qu'est-ce que cela signifie si quelqu'un dit que les vues créent une table virtuelle, alors que les procédures créent une table de matériaux?
S'il vous plaît laissez-moi savoir plus de points, s'il y en a.
Une vue représente une table virtuelle . Vous pouvez joindre plusieurs tables dans une vue et utiliser cette vue pour présenter les données comme si celles-ci provenaient d'une seule table.
Une procédure stockée utilise des paramètres pour exécuter 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 - Microsoft fournit des informations indiquant quand et pourquoi les utiliser.
Disons que j'ai deux tables:
tbl_user colonnes: .user_id, .user_name, .user_pw
tbl_profile Colonnes: .profile_id, .user_id .profile_description
Donc, si je me trouve interroger beaucoup de ces tables ... au lieu de faire la jointure dans CHAQUE part de sql, je définirais une vue comme:
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
Donc, à l'avenir, si je veux interroger profile_description par identifiant d'utilisateur ... tout ce que je dois faire est
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
CE code pourrait être utilisé dans une procédure stockée telle que:
create procedure dbo.getDesc
@ID int
AS
begin
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO
Alors plus tard je peux appeler
dbo.getDesc 25
et j'obtiendrai la description de l'ID utilisateur 25. où 25 est votre paramètre.
Il y a évidemment BEAUCOUP plus de détails, mais ce n’est que l’idée de base.
Beaucoup d'informations disponibles sur le Web comme this
Voici un bon résumé:
Une procédure stockée:
Une vue:
Vous devez d'abord comprendre que les deux sont des choses différentes. Les procédures stockées sont mieux utilisées pour les instructions INSERT-UPDATE-DELETE. Les vues sont utilisées pour les instructions SELECT. et vous devriez utiliser les deux.
Dans les vues, vous ne pouvez pas modifier les données. Certaines bases de données ont des vues modifiables dans lesquelles vous pouvez utiliser INSERT-UPDATE-DELETE sur des vues.
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 de la capture instantanée 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.
View est une simple présentation des données stockées dans les tables de la 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 de stockage exécute des instructions SQL.
Consultez cet article: View vs Stored Procedures . Exactement ce que vous cherchez
Une vue est un moyen simple de sauvegarder un complexe SELECT
dans la base de données.
Une procédure de stockage est utilisée lorsque le simple SQL ne suffit pas. Les procédures stockées contiennent des variables, des boucles et des appels à d'autres procédures stockées. C'est un langage de programmation, pas un langage de requête.
Les vues sont statiques. Considérez-les comme de nouvelles tables présentant une certaine disposition. Les données qu’elles contiennent sont créées instantanément à l’aide de la requête que vous avez créée. Comme avec n'importe quelle table SQL, vous pouvez la trier et la filtrer avec WHERE
, GROUP BY
et ORDER BY
.
Cela dépend de ce que vous faites.
Le dépend de la base de données. Des 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 qui est 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 dans la base de données).
Je ne comprends pas de quoi tu parles.
La principale différence est que lorsque vous interrogez une vue, sa définition est collée dans votre requête. La procédure pourrait également donner les résultats de la requête, mais elle est compilée et donc beaucoup plus rapidement. Une autre option est les vues indexées.
Mahesh n’a pas tout à fait raison de suggérer que vous ne pouvez pas modifier les données dans une vue. Donc, avec la vue de Patrick
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
Je peux mettre à jour les données ... par exemple, je peux faire l'une de ces choses ...
Update vw_user_profile Set profile_description='Manager' where user_id=4
ou
Update tbl_profile Set profile_description='Manager' where user_id=4
Vous ne pouvez pas INSERER dans cette vue car tous les champs de la table ne sont pas présents et je suppose que PROFILE_ID est la clé primaire et ne peut pas être NULL. Cependant, vous pouvez parfois insérer dans une vue ...
J'ai créé une vue sur une table existante en utilisant ...
Create View Junk as SELECT * from [TableName]
ENSUITE
Insert into junk (Code,name) values
('glyn','Glyn Roberts'),
('Mary','Maryann Roberts')
et
DELETE from Junk Where ID>4
L'INSERT et le DELETE ont tous deux travaillé dans ce cas
De toute évidence, vous ne pouvez pas mettre à jour les champs agrégés ou calculés, mais toute vue qui est simplement une vue directe doit pouvoir être mise à jour.
Si la vue contient plus d'une table, vous ne pouvez pas insérer ou supprimer, mais si la vue est un sous-ensemble d'une seule table, vous le pouvez généralement.
En plus des commentaires ci-dessus, je voudrais ajouter quelques points à propos de Views.
@Patrick est correct avec ce qu'il a dit, mais pour répondre à vos autres questions, une vue se créera d'elle-même dans la mémoire. Selon le type de jointure, de données et, si une agrégation est effectuée, la vue risque d'être très gourmande en mémoire.
Les procédures stockées effectuent tout leur traitement en utilisant Table de hachage temporaire, par exemple # tmpTable1 ou en mémoire avec @ tmpTable1. En fonction de ce que vous voulez lui dire de faire.
Une procédure stockée est comme une fonction, mais est appelée directement par son nom. au lieu de fonctions réellement utilisées dans une requête elle-même.
Évidemment, la plupart du temps, les tables de mémoire sont plus rapides si vous ne récupérez pas beaucoup de données.