it-swarm.com.de

Konvertieren Sie die SQL Server-Ergebnismenge in eine Zeichenfolge

Ich erhalte das Ergebnis in SQL Server als 

SELECT StudentId FROM Student WHERE condition = xyz

Ich bekomme die Ausgabe gerne

 StudentId 
 1236 

 7656 

 8990 
........

Der Ausgabeparameter der gespeicherten Prozedur ist @studentId string und ich möchte die return-Anweisung als 

1236, 7656, 8990.

Wie kann ich die Ausgabe in einen einzelnen String konvertieren? 

Ich kehre einzelne Spalte zurück. Studenten ID]

38
Zerotoinfinity

Testen Sie das:

 DECLARE @result NVARCHAR(MAX)

 SELECT @result = STUFF(
                        (   SELECT ',' + CONVERT(NVARCHAR(20), StudentId) 
                            FROM Student 
                            WHERE condition = abc 
                            FOR xml path('')
                        )
                        , 1
                        , 1
                        , '')
40
ABI
DECLARE @result varchar(1000)

SET @result = ''

SELECT @result = @result + StudentId + ',' FROM Student WHERE condition = xyz

select substring(@result, 0, len(@result) - 1) --trim extra "," at end
56
Bonshington

Verwenden Sie die COALESCE-Funktion: 

DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = COALESCE(@StudentID + ',', '') + StudentID
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
8
Saloni

Beide Antworten sind gültig, aber vergessen Sie nicht, den Wert der Variablen zu initialisieren, standardmäßig NULL und mit T-SQL:

NULL + "Any text" => NULL

Es ist ein sehr häufiger Fehler, vergiss es nicht!

Es ist auch eine gute Idee, die ISNULL-Funktion zu verwenden:

SELECT @result = @result + ISNULL(StudentId + ',', '') FROM Student
7
Alex

Verwenden Sie die Funktion CONCAT, um Konvertierungsfehler zu vermeiden:

DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = CONCAT(COALESCE(@StudentID + ',', ''), StudentID)
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
1
pistol-pete

oder eine einzelne select-Anweisung ...

DECLARE @results VarChar(1000)
SELECT @results = CASE
     WHEN @results IS NULL THEN CONVERT( VarChar(20), [StudentId])
     ELSE ', ' + CONVERT( VarChar(20), [StudentId])
   END
FROM Student WHERE condition = abc;
0
brad.v

Die Antwort aus brad.v ist falsch! Sie erhalten keine verkettete Zeichenfolge.

Hier ist der richtige Code, fast wie brad.v , jedoch mit einer wichtigen Änderung:

DECLARE @results VarChar(1000)
  SELECT @results = CASE
     WHEN @results IS NULL THEN CONVERT( VarChar(20), [StudentId])
     ELSE @results + ', ' + CONVERT( VarChar(20), [StudentId])
  END
FROM Student WHERE condition = abc;

Sieh den Unterschied? :) brad.v Bitte korrigieren Sie Ihre Antwort, ich kann nichts tun, um sie zu korrigieren oder zu kommentieren, da mein Ruf hier null ist. Ich denke, ich kann meine entfernen, nachdem Sie Ihre repariert haben. Vielen Dank!

0
Vadym Voznyuk

Dieser arbeitet mit NULL-Werten in der Tabelle und erfordert am Ende keine Unterzeichenfolge. COALESCE arbeitet nicht wirklich gut mit NULL-Werten in der Tabelle (falls vorhanden).

DECLARE @results VARCHAR(1000) = '' 
SELECT @results = @results + 
           ISNULL(CASE WHEN LEN(@results) = 0 THEN '' ELSE ',' END + [StudentId], '')
FROM Student WHERE condition = xyz

select @results
0
Gega Kakabadze