Od SQL Serveru 2012 máme možnost spojovat řetězce pomocí funkce CONCAT(), která však neumí nic jiného, než prosté spojení řetězců za sebe a není možné specifikovat separátor, kterým bychom od sebe jednotlivé řetězce mohli oddělit. SQL Server 2017 proto přichází s novou funkcí CONCAT_WS(), kde již přídavek WS napovídá, že se jedná o zkratku z anglického With Separator.
Porovnejme si nyní obě funkce na jednoduchém příkladu:
DECLARE @String1 NVARCHAR(100) = 'String1' DECLARE @String2 NVARCHAR(100) = 'String2' DECLARE @String3 NVARCHAR(100) = 'String3' SELECT 'CONCAT()' [Function], CONCAT(@String1, @String2, @String3) Result UNION ALL SELECT 'CONCAT()_WS' [Function], CONCAT_WS(', ', @String1, @String2, @String3) GO
Dobrá zpráva je, že separátor můžeme zaslat do funkce i jako parametr, čímž získáváme mnohem větší svobodu při psaní kódu:
DECLARE @String1 NVARCHAR(100) = 'String1' DECLARE @String2 NVARCHAR(100) = 'String2' DECLARE @String3 NVARCHAR(100) = 'String3' DECLARE @Separator CHAR(1) = '-' SELECT 'CONCAT()_WS' [Function], CONCAT_WS(@Separator, @String1, @String2, @String3) GO