9
votes

Requête avec des variables

est-il possible de définir / lire des variables de la requête?

pseudo code: xxx

Je sais que le résultat peut être Aussi réalisé en faisant la requête différente, l'utilisation réelle de ma question est trop difficile à expliquer.

C'est Server Microsoft SQL en question. :)


2 commentaires

Qu'essayez-vous de réaliser à travers cette requête? Expliquer en mots plz :)


Eh bien, sa requête complexe qui rassemble beaucoup d'informations basées sur différents horodatés, etc., donc j'ai besoin de calculer les prix et les taux de consommation de Witin une requête SQL SOO, j'ai fini par faire les mêmes "sous-requires" plusieurs fois une pensée qu'il serait efficace de Définissez une variable et réutilisez-la.


4 Réponses :


9
votes

Oui, vous pouvez définir des variables dans une requête. Votre syntaxe est en fait assez proche.

Pour ce faire, vous avez besoin: P>

DECLARE @AnimalName  VARCHAR(20)
DECLARE @TallestAnimal  INT
DECLARE @SmallestAnimal INT

SELECT @AnimalName = animal_name,
   @TallestAnimal  = (select top 1 height from animal order by height desc),
   @SmallestAnimal = (select top 1 height from  animal order by height asc) 
FROM animals
WHERE height BETWEEN @SmallestAnimal AND @TallestAnimal 


5 commentaires

Merci pour toutes les réponses ... donnez-moi une minute pour le tester :)


Testé .... "DÉCLARE @TEST VARCHAR (10) SELECT *, @ TEST = (SELECT TOP 1 UTILISATEUR DE COMMANDE DES UTILISATEURS par userid Desc) à partir de transmission.dbo.utilisateur" Résultat .... Une instruction SELECT qui attribue une valeur à une variable ne doit pas être combinée avec des opérations de récupération de données. soo ça ne marche pas ses coutures


@freands - Lisez mon commentaire à ce sujet dans mon message. C'est parce que vous avez sélectionné *. Vous devez affecter tous les champs à une variable, comme vous l'avez fait avec "@Test".


Droit! C'est une façon de le faire ... mais j'ai ~ 40 colonnes .... Attribution de toutes les variables sera un problème :) Mais merci de toute façon


@freandy lol d'accord. Je vous ai donné une solution basée sur votre problème animal. Quoi qu'il en soit, j'espère que cela a aidé.



6
votes

Non, il n'est pas possible, utilisez plutôt comme ceci:

DECLARE @tallest_animal int, @smallest_animal int
SET @tallest_animal=(SELECT max(height) from animals)
SET @smallest_animal=(SELECT min(height) from animals)
SELECT animal_name from animals where height between @tallest_animal AND @smallest_animal


1 commentaires

Nah ... Je dois définir et lire une variable de la même requête. :(



5
votes

Vous pouvez utiliser des tables dérivées au lieu de variables.

select A.animal_name, M.tallest, M.smallest
from animals A
  inner join 
      (
        select max(height) as tallest,
               min(height) as smallest
        from animal
      ) M
    on A.height between M.smallest and M.tallest


0 commentaires

1
votes

Il n'est pas possible pour une instruction SELECT pour affecter des valeurs aux variables et renvoyer des résultatsset dans la même instruction SELECT - il s'agit d'une restriction de SQL Server. Ce ne serait-il pas génial si c'était possible!

Pourquoi souhaitez-vous utiliser des variables ici si vous avez besoin d'une seule déclaration? Ce qui suit ne fonctionnerait-au pas pour vous? xxx

Si vous souhaitez utiliser les variables ultérieurement dans une procédure stockée, votre seule option consiste à utiliser deux instructions sélectionnées: une pour L'affectation et une pour la sélection: xxx

Notez que lorsque vous utilisez ADO, vous pouvez utiliser des requêtes composées dans une commande ADO. En d'autres termes, votre composant de commande peut inclure plusieurs instructions, de sorte que les deux des solutions ci-dessus fonctionnent.


0 commentaires