Je reçois le résultat dans SQL Server en tant que
SELECT StudentId FROM Student WHERE condition = xyz
Je reçois la sortie comme
StudentId 1236 7656 8990 .__………………………………
Le paramètre de sortie de la procédure stockée est @studentId
chaîne et je souhaite que l'instruction return renvoie
1236, 7656, 8990.
Comment puis-je convertir la sortie en une seule chaîne?
Je retourne colonne unique [ie. Carte d'étudiant]
Testez ceci:
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
Utilisez la fonction COALESCE
:
DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = COALESCE(@StudentID + ',', '') + StudentID
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
Les deux réponses sont valables, mais n'oubliez pas d'initialiser la valeur de la variable, par défaut, NULL et avec T-SQL:
NULL + "Any text" => NULL
C'est une erreur très commune, ne l'oubliez pas!
C'est aussi une bonne idée d'utiliser la fonction ISNULL:
SELECT @result = @result + ISNULL(StudentId + ',', '') FROM Student
Utilisez la fonction CONCAT
pour éviter les erreurs de conversion:
DECLARE @StudentID VARCHAR(1000)
SELECT @StudentID = CONCAT(COALESCE(@StudentID + ',', ''), StudentID)
FROM Student
WHERE StudentID IS NOT NULL and Condition='XYZ'
select @StudentID
ou une seule déclaration select ...
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;
Le réponse de brad.v est incorrect! Cela ne vous donnera pas une chaîne concaténée.
Voici le code correct, presque comme brad.v mais avec un changement important:
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;
Regarde la différence? :) brad.v corrige ta réponse, je ne peux rien faire pour la corriger ou la commenter car ma réputation ici est nulle. Je suppose que je peux enlever le mien après avoir réparé le tien. Merci!
Celui-ci fonctionne avec les valeurs NULL dans le tableau et ne nécessite pas d'opération de sous-chaîne à la fin. COALESCE ne travaille pas vraiment bien avec les valeurs NULL dans la table (si elles seront présentes).
DECLARE @results VARCHAR(1000) = ''
SELECT @results = @results +
ISNULL(CASE WHEN LEN(@results) = 0 THEN '' ELSE ',' END + [StudentId], '')
FROM Student WHERE condition = xyz
select @results