web-dev-qa-db-fra.com

SQL SELECT multi-colonnes INTO multi-variables

Je convertis SQL de Teradata en SQL Server

à Teradata, ils ont le format

SELECT col1, col2
FROM table1
INTO @variable1, @variable2

Dans SQL Server, j'ai trouvé

SET @variable1 = (
SELECT col1 
FROM table1
);

Cela ne permet qu'une seule colonne/variable par déclaration. Comment assigner 2 variables ou plus en utilisant une seule instruction SELECT?

69
ala
SELECT @variable1 = col1, @variable2 = col2
FROM table1
144
David M
SELECT @var = col1,
       @var2 = col2
FROM   Table

Voici quelques informations intéressantes sur SET/SELECT

  • SET est la norme ANSI pour l’affectation des variables, pas SELECT.
  • SET ne peut affecter qu'une variable à la fois, SELECT peut effectuer plusieurs affectations à la fois.
  • En cas d’affectation à partir d’une requête, SET ne peut affecter qu’une valeur scalaire. Si la requête renvoie plusieurs valeurs/lignes, SET émettra une erreur. SELECT affectera l'une des valeurs à la variable et masquera le fait que plusieurs valeurs ont été renvoyées (vous ne saurez donc probablement jamais pourquoi quelque chose ne va pas ailleurs - amusez-vous à résoudre ce problème)
  • Lors de l'affectation à partir d'une requête, si aucune valeur n'est renvoyée, SET affectera NULL, alors que SELECT n'effectuera pas l'affectation du tout (de sorte que la variable ne sera pas modifiée par rapport à sa valeur précédente).
  • En ce qui concerne les différences de vitesse, il n'y a pas de différence directe entre SET et SELECT. Cependant, la capacité de SELECT à effectuer plusieurs affectations en une seule fois lui confère un léger avantage en termes de vitesse par rapport à SET.
34
Svetlozar Angelov