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]
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
, '')
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
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
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
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
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;
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!
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