I have a sql function that includes this code:
DECLARE @CodeNameString varchar(100)
SELECT CodeName FROM AccountCodes ORDER BY Sort
I need to concatenate all results from the select query into CodeNameString.
Obviously a FOREACH loop in C# code would do this, but how do I do it in SQL?
If you’re on SQL Server 2005 or up, you can use this
FOR XML PATH & STUFFtrick:The
FOR XML PATH('')basically concatenates your strings together into one, long XML result (something like,code1,code2,code3etc.) and theSTUFFputs a “nothing” character at the first character, e.g. wipes out the “superfluous” first comma, to give you the result you’re probably looking for.UPDATE: OK – I understand the comments – if your text in the database table already contains characters like
<,>or&, then my current solution will in fact encode those into<,>, and&.If you have a problem with that XML encoding – then yes, you must look at the solution proposed by @KM which works for those characters, too. One word of warning from me: this approach is a lot more resource and processing intensive – just so you know.