Pouvons-nous passer un paramètre à une vue dans Microsoft SQL Server?
J'ai essayé de create view
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;
sql
sql-server
parameters
parameter-passing
views
arunachalam
la source
la source
Parameters are out of the discussion
trop audacieuse. CounterexampleRéponses:
Comme déjà indiqué, vous ne pouvez pas.
Une solution possible serait d'implémenter une fonction stockée, comme:
Cela vous permet de l'utiliser comme une vue normale, avec:
la source
Il existe deux façons de réaliser ce que vous voulez, malheureusement, aucune ne peut être réalisée avec une vue.
Vous pouvez créer une fonction définie par l'utilisateur à valeur de table qui prend le paramètre souhaité et renvoie un résultat de requête
Ou vous pouvez faire à peu près la même chose, mais créer une procédure stockée au lieu 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 à
la source
SELECT
facilement: en savoir plus .Non, vous ne pouvez pas, comme l'a dit Mladen Prajdic. Considérez une vue comme un «filtre statique» sur une table ou une combinaison de tables. Par exemple: une vue peut combiner des tables
Order
etCustomer
ainsi vous obtenez une nouvelle «table» de lignesOrder
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 sélectionne uniquement les commandes non traitées de laOrder
table (filtre statique).Vous choisiriez ensuite dans la vue comme vous le feriez dans n'importe quel autre tableau "normal" - tout filtrage "non statique" doit être effectué en dehors de la vue (comme "Obtenir toutes les commandes pour les clients appelés Miller" ou "Obtenir les commandes non traitées" qui est arrivé le 24 décembre ").
la source
Normalement, les vues ne sont pas paramétrées. Mais vous pouvez toujours injecter des paramètres. Par exemple en utilisant le contexte de session :
Invocation:
Et un autre:
Démo DBFiddle
Il en va de même pour Oracle (bien sûr, la syntaxe de la fonction contextuelle est différente).
la source
Pourquoi avez-vous besoin d'un paramètre en vue? Vous pourriez simplement utiliser une
WHERE
clause.et votre requête devrait faire le travail:
la source
WHERE
pour la table, au lieu d'unWHERE
pour la vue.Une manière piratée de le faire sans procédures ou fonctions stockées serait de créer une table de paramètres dans votre base de données, avec les colonnes Id, Param1, Param2, etc. Insérez une ligne dans cette table contenant les valeurs Id = 1, Param1 = 0, Param2 = 0, etc. Ensuite, vous pouvez ajouter une jointure à cette table dans votre vue pour créer l'effet souhaité et mettre à jour la table des paramètres avant d'exécuter la vue. Si plusieurs utilisateurs mettent à jour le tableau des paramètres et exécutent la vue simultanément, les choses peuvent mal tourner, mais sinon, cela devrait fonctionner correctement. Quelque chose comme:
la source
non. si vous devez ensuite utiliser une fonction définie par l'utilisateur à laquelle vous pouvez passer des paramètres.
la source
Non, une vue n'est pas interrogée différemment de SELECT à partir d'une table.
Pour faire ce que vous voulez, utilisez une fonction définie par l' utilisateur table avec un ou plusieurs paramètres
la source
Une vue n'est rien de plus qu'une instruction 'SELECT' prédéfinie. La seule vraie réponse serait donc: non, vous ne pouvez pas.
Je pense que ce que vous voulez vraiment faire est de créer une procédure stockée, où en principe vous pouvez utiliser n'importe quel SQL valide pour faire ce que vous voulez, y compris accepter des paramètres et sélectionner des données.
Il semble probable que vous n'ayez vraiment besoin d'ajouter une clause where que lorsque vous sélectionnez dans votre vue, mais vous n'avez pas vraiment fourni suffisamment de détails pour être sûr.
la source
nous pouvons écrire une procédure stockée avec des paramètres d'entrée, puis utiliser cette procédure stockée pour obtenir un jeu 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
la source
Comme je le sais, la vue peut être quelque chose comme la commande select. Vous pouvez également ajouter des paramètres à cette sélection, par exemple dans des instructions where comme celle-ci:
la source
Non, une vue est statique. Une chose que vous pouvez faire (selon la version du serveur SQl) est d'indexer une vue.
Dans votre exemple (interroger une seule table), une vue indexée n'a aucun avantage à simplement interroger la table avec un index dessus, mais si vous effectuez beaucoup de jointures sur des tables avec des conditions de jointure, une vue indexée peut grandement améliorer les performances.
la source
Si vous ne souhaitez pas utiliser de fonction, vous pouvez utiliser quelque chose comme ça
J'espère que cela aidera
la source
non vous pouvez passer le paramètre à la procédure en vue
la source
Voici une option que je n'ai pas vue jusqu'à présent:
Ajoutez simplement la colonne que vous souhaitez restreindre à la vue:
la source
Vous pouvez contourner juste pour exécuter la vue, SQL va crier et pleurer, mais faites-le et exécutez-le! Vous ne pouvez pas sauver.
la source
Votre vue peut référencer une table externe contenant vos paramètres.
Comme d'autres l'ont mentionné, la vue dans SQL Server ne peut pas avoir de paramètres d'entrée externes. Cependant, vous pouvez facilement simuler une variable dans votre vue en utilisant CTE. Vous pouvez l'exécuter en test dans votre version de SQL Server.
produisant une sortie:
aussi via
JOIN
aussi via
CROSS APPLY
la source
J'ai une idée que je n'ai pas encore essayée. Tu peux faire:
Vos paramètres seront enregistrés et modifiés dans le tableau de configuration.
la source
J'ai réalisé cette tâche pour mes besoins comme suit
la source