Táto stránka pre svoju správnu funkčnosť vyžaduje súbory cookies. Slúžia na authentifikáciu návštevníka, analýzu návštevnosti a reklamnú personalizáciu.
logo Knowledge base KB
mobile

Vygenerovanie reťazca z hodnôt s oddeľovačom v MS SQL

Na vygenerovanie reťazca, obsahujúceho viacero hodnôt, oddelených s vopred určeným oddeľovačom, vieme využiť zabudovanú funkciu COALESCE a pomocnú textovú premennú.

Do funkcie COALESCE vstupuje ľubovoľný počet parametrov a jej úlohou je vrátiť prvú ne-NULL-ovú hodnotu zo zadaných parametrov. Pomocná premenná bude slúžiť ako úložisko spracovávaných hodnôt, ktoré sa tak prenášajú medzi jednotlivými volaniami funkcie.

Ukážeme si to na jednoduchom príklade:

Zdrojový kód:
SELECT N'Janko' AS FirstName INTO #Data
UNION ALL
SELECT N'Peter' AS FirstName
UNION ALL
SELECT N'Lenka' AS FirstName
UNION ALL
SELECT N'Zuzana' AS FirstName

DECLARE @Result NVARCHAR(MAX)

SELECT @Result = COALESCE(@Result + ', ', '') + FirstName FROM #Data WHERE FirstName IS NOT NULL

SELECT @Result AS Vysledok

DROP TABLE #Data


Premennú @Result sme je pred použitím nenaplnili žiadnou hodnotou, čiže jej hodnota bude NULL. Do funkcie COALESCE vstupuje prvý parameter, ktorý je zložený z pomocnej premennej, ku ktorej pridáme text, obsahujúci požadovaný oddeľovač. Druhým parametrom bude prázdny textový reťazec. K výsledku funkcie následne pridáme hodnotu z tabuľky, ktorá obsahuje požadované dáta na spojenie a výsledok celého zápisu vložíme do rovnakej premennej, ako bola použitá v prvom parametri funkcie.

Pri prvom riadku v tabuľke, bude hodnota premennej @Result stále NULL a tak aj výsledkom jej spojenia s textom oddeľovača bude NULL. Funkcia COALESCE teda vráti jej druhý parameter (prázdny reťazec), ktorý sa spojí s hodnotou stĺpca FirstName prvého riadka v tabuľke a výsledná hodnota sa zapíše do premennej @Result. Keďže hodnota premennej pri nasledujúcich volaniach funkcie už nie NULL, bude jej výsledkom prvý parameter, čo je aktuálna hodnota premennej obohatená o oddeľovač. Výsledok je doplnený aktuálnou hodnotou z tabuľky a následne opäť uložený do premennej.

Dôležité je ale zabezpečiť, aby hodnoty, ktoré prichádzajú z tabuľky, neobsahovali NULL hodnotu, ktorá by predchádzajúce dáta premennej vymazala a výsledkom by bol nekompletný zoznam.

Keywords: MS SQL, COMMA SEPARATED VALUES

Codeblog