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
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.
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).
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.