it-swarm.com.de

Die SQL PRINT-Anweisung gibt nichts aus

Ich bekomme keine Ausgabe für diese einfache PRINT Anweisung. Was vermisse ich?

Daten in sqlfiddle geliefert .

DECLARE @team varchar(20)

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

Die PRINT-Anweisung gibt nichts aus, wenn der Ausdruck eine Null ergibt. Anscheinend @team ist als Ergebnis der vorhergehenden Anweisung null, wodurch PRINT nichts ausgibt. Wenn Sie etwas drucken möchten, auch wenn die Variable null ist, verwenden Sie ISNULL oder COALESCE:

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

Sie können dem SELECT auch einen Filter hinzufügen, um sicherzustellen, dass NULL-Werte übersprungen werden (, wenn Sie sie überspringen möchten, d. H.

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

Wenn die Tabelle jedoch keine Zeilen enthält oder wenn alle TEAM -Werte null sind, führt diese Anweisung keine Zuweisung durch. In diesem Fall bedeutet PRINT, wenn immer noch nichts ausgegeben wird, @team war schon vor SELECT null. Daher müssen Sie möglicherweise noch die vorherige Methode anwenden.

Außerdem ist es keine gute Idee, eine Variable auf diese Weise zuzuweisen, wenn eine Tabelle viele Zeilen enthält, da Sie nicht steuern können, welcher Wert letztendlich zugewiesen wird. Deshalb. Alexei hat einen Punkt dort auch in Bezug auf die Verwendung von TOP sowie die Kombination mit ORDER BY und möglicherweise zusätzlichen Filtern.

9
Andriy M

PRINT gibt eine Nachricht aus, keine Ergebnismenge. Versuchen Sie etwas wie das Folgende:

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

SELECT @team AS Team

Mein Beispiel enthält TOP, weil ich sichergestellt habe, dass @team erhält einen einzelnen Wert. Sein Wert wird jedoch nicht klar sein (nicht deterministisch). Am sichersten ist die Verwendung eines ORDER BY Klausel und ein WHERE, das einen einzelnen Datensatz erzwingt).

6
Alexei

Ihr Code funktioniert auf meinem Computer und wird gedruckt

wert ist 800

SQLFiddle druckt anscheinend keine Ausgabe.

Wenn Sie Ihr Sample auf dbfiddle ausprobieren, erhalten Sie die richtige Ausgabe.

Wenn Sie nur PRINT 'A'; auf SQLFiddle druckt es auch nichts (siehe hier ), während es tut auf DBFiddle.

Die Implementierungsdetails von SQLFiddle sind nicht klar, aber ich nehme an, es unterdrückt nur Druckanweisungen.