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:
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
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 FirstNameDECLARE @Result NVARCHAR(MAX)SELECT @Result = COALESCE(@Result + ', ', '') + FirstName FROM #Data WHERE FirstName IS NOT NULLSELECT @Result AS VysledokDROP TABLE #Data
UNION ALL
SELECT N'Peter' AS FirstName
UNION ALL
SELECT N'Lenka' AS FirstName
UNION ALL
SELECT N'Zuzana' AS FirstNameDECLARE @Result NVARCHAR(MAX)SELECT @Result = COALESCE(@Result + ', ', '') + FirstName FROM #Data WHERE FirstName IS NOT NULLSELECT @Result AS VysledokDROP 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