Pouvons-nous nous passer des paramètres à une vue en SQL?
Peut-on passer d'un paramètre à un affichage dans Microsoft SQL Server?
J'ai essayé de create view
de la manière suivante, mais cela ne fonctionne pas:
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
- Une vue est stockée sql texte d'une requête select. Paramètres de la discussion. Lorsque votre requête stockée renvoie la colonne où vous souhaitez filtrer, vous pouvez le faire dans l'appel de la requête. E. g. "SELECT * from v_emp OÙ emp_id = ?"
Parameters are out of the discussion
Trop audacieux. contre-exemple
Vous devez vous connecter pour publier un commentaire.
Comme déjà dit, vous ne pouvez pas.
Une solution possible serait de mettre en place une fonction stockée, comme:
Cela vous permet de l'utiliser comme un mode normal, avec:
Il y a 2 façons de réaliser ce que vous voulez malheureusement, aucun des deux ne peut être fait à l'aide d'un point de vue.
Vous pouvez soit créer une table défini par l'utilisateur fonction qui prend le paramètre que vous voulez et retourne le résultat d'une requête
Ou vous pouvez faire à peu près la même chose, mais créer une procédure stockée à la place d'une fonction définie par l'utilisateur.
Par Exemple
la procédure stockée ressemblerait
Ou la fonction définie par l'utilisateur ressemblerait
SELECT
facilement: en lire plus.Non vous ne pouvez pas, en tant que Mladen Prajdic dit. Pense que d'un point de vue comme un "filtre statique" sur une table ou une combinaison de tables. Par exemple: un point de vue peut combiner les tables
Order
etCustomer
afin de vous obtenir un nouveau "tableau" de lignes deOrder
avec de nouvelles colonnes contenant le nom du client et le numéro de client (combinaison de tables). Ou vous pouvez créer une vue qui ne sélectionne que les non transformés, les commandes de laOrder
table (filtre statique).Vous pouvez sélectionner à partir de la vue comme vous le feriez pour sélectionner à partir de n'importe quel autre "normal" de la table tous les "non-statique" filtrage doit être fait hors de la vue (comme "Obtenir toutes les commandes pour les clients du nom de Miller" ou "prendre les commandes non traitées qui sont venus dans le Dec 24").
Normalement points de vue ne sont pas paramétrées. Mais vous pouvez toujours injecter de certains paramètres. Par exemple à l'aide de le contexte de session:
Invocation:
Et l'autre:
DBFiddle Démo
La même chose est applicable pour Oracle (bien sûr syntaxe de la fonction contexte est différent).
Pourquoi avez-vous besoin d'un paramètre en vue? Vous pouvez simplement utiliser
WHERE
clause.et votre requête devrait faire l'affaire:
WHERE
pour la table, au lieu d'unWHERE
pour la vue.Un hacky moyen de le faire sans des procédures stockées ou des fonctions serait de créer une table dans votre base de données, avec les colonnes Id, Param1, Param2, etc. Insérer une ligne dans la table contenant les valeurs Id=1,Param1=0,Param2=0, etc. Ensuite, vous pouvez ajouter une jointure de la table en vue de créer l'effet désiré, et de mettre à jour les paramètres de la table avant l'exécution de la vue. Si vous avez plusieurs utilisateurs de mettre à jour les paramètres de la table et de l'exécution de l'afficher simultanément les choses pourraient aller mal, mais sinon, il devrait fonctionner correctement. Quelque chose comme:
pas.
si vous devez utiliser une fonction définie par l'utilisateur pour lequel vous pouvez passer des paramètres dans.
Pas, d'un point de vue est interrogé de la même manière que pour la Sélection à partir d'une table.
À faire ce que vous voulez, utilisez un table en fonction définie par l'utilisateur avec un ou plusieurs paramètres
Vue est rien de plus qu'un predifinis 'SELECT' instruction. Donc, la seule réponse serait: Non, vous ne pouvez pas.
Je pense vraiment ce que vous voulez faire est de créer une procédure stockée, où, en principe, vous pouvez utiliser SQL valide à faire ce que vous voulez, y compris accepter les paramètres et la sélection des données.
Il semble probable que vous avez vraiment besoin d'ajouter une clause where lorsque vous sélectionnez à partir de votre point de vue, mais vous n'avez pas vraiment de fournir suffisamment de détails pour être sûr.
nous pouvons écrire une procédure stockée avec des paramètres d'entrée et ensuite utiliser cette procédure stockée pour obtenir un ensemble de résultats à partir de la vue.
voir l'exemple ci-dessous.
la procédure stockée est
et la vue à partir de laquelle nous pouvons obtenir le jeu de résultats est
Que je sais que la vue peut être quelque chose comme commande select.
Vous pouvez également ajouter des paramètres pour cela, sélectionnez par exemple, dans lesquels des énoncés comme ceci:
Pas, un point de vue statique. Une chose que vous pouvez faire (selon la version de SQl server) est l'indice d'une vue.
Dans votre exemple (interrogation d'une seule table), une vue indexée n'a pas d'avantages pour simplement l'interrogation de la table avec un index sur elle, mais si vous faites beaucoup de jointures sur des tables avec des conditions de jointure, une vue indexée peut améliorer considérablement les performances.
Si vous ne souhaitez pas utiliser la fonction, vous pouvez utiliser quelque chose comme cela
Espère que ça aidera
pas
vous pouvez passer le paramètre à la procédure en vue
Ici est une option que je n'ai pas vu jusqu'à présent:
Il suffit d'ajouter la colonne que vous souhaitez restreindre à la vue:
Vous pouvez ignorer simplement d'exécuter la vue SQL vin et pleurer, mais viens de le faire et l'exécuter! Vous ne pouvez pas l'enregistrer.
Votre point de vue peut faire référence à certains de la table externe contenant vos paramètres.
Comme d'autres l'ont mentionné, le point de vue dans SQL Server ne peut pas avoir externes des paramètres d'entrée. Cependant, vous pouvez facilement simuler une variable dans votre point de vue à l'aide de la CTE. Vous pouvez essayer de l'exécuter dans votre version de SQL Server.
rendement de sortie:
aussi via
JOIN
aussi via
CROSS APPLY
J'ai une idée que je n'ai pas encore essayé. Vous pouvez le faire:
Vos paramètres seront sauvegardés et modifié dans la table de configuration.
J'ai réalisé cette tâche pour mes besoins comme suit