web-dev-qa-db-fra.com

L'instruction SQL PRINT n'imprime rien

Je ne reçois aucune sortie pour cette simple instruction PRINT. Qu'est-ce que je rate?

Données fournies dans sqlfiddle .

DECLARE @team varchar(20)

BEGIN
   SELECT @team = TEAM
   FROM DISTRIB_LINE 
   PRINT 'value is' + @team
END
5
user146601

L'instruction PRINT n'imprimera rien si l'expression est évaluée à null. Apparemment @team finit par être null à la suite de l'instruction précédente, provoquant la sortie rien de PRINT. Si vous souhaitez imprimer quelque chose même lorsque la variable est nulle, utilisez ISNULL ou COALESCE:

PRINT 'value is ' + ISNULL(@team, '(null)');

Vous pouvez également ajouter un filtre à SELECT pour vous assurer que les valeurs NULL sont ignorées ( si vous souhaitez les ignorer, c'est-à-dire):

SELECT @team = TEAM
FROM DISTRIB_LINE
WHERE TEAM IS NOT NULL;

Cependant, si la table n'a pas de lignes ou si toutes les valeurs TEAM sont nulles, cette instruction ne fera aucune affectation. Dans ce cas, si PRINT ne produit toujours rien, cela signifie @team était nul avant même le SELECT. Par conséquent, vous devrez peut-être toujours appliquer la méthode précédente.

En outre, ce n'est pas une bonne idée d'affecter une variable de cette façon lorsqu'une table a plusieurs lignes, car vous n'avez aucun contrôle sur la valeur qui sera finalement affectée. Donc. Alexei a un point là aussi en ce qui concerne l'utilisation de TOP, ainsi que la combinaison avec ORDER BY et, éventuellement, des filtres supplémentaires.

9
Andriy M

PRINT affiche un message, pas un jeu de résultats. Essayez quelque chose comme ceci:

DECLARE @team varchar(20)
SELECT TOP 1 @team = TEAM
FROM DISTRIB_LINE 

SELECT @team AS Team

Mon exemple contient TOP car je me suis assuré que @team reçoit une seule valeur. Cependant, sa valeur ne sera pas claire (non déterministe). Le plus sûr est d'utiliser un ORDER BY clause et un WHERE qui applique un seul enregistrement).

6
Alexei

Votre code fonctionne sur ma machine et s'imprime

la valeur est 800

SQLFiddle n'imprime tout simplement pas la sortie.

Si vous essayez votre échantillon sur dbfiddle vous obtenez la sortie correcte.

Si vous exécutez simplement PRINT 'A'; sur SQLFiddle, il n'imprime rien non plus (voir ici ) tandis qu'il fait sur DBFiddle.

Les détails d'implémentation de SQLFiddle ne sont pas clairs, mais je suppose que cela supprime simplement les instructions d'impression.