Dealing with Comma Separated Values
Sometimes we need logic where you want to hold multiple row
values in single Comma separated string.
Previously we were using cursor function to achieve this
functionality but now a days in SQL 2012 we can achieve this functionality in simple and
faster way.
Below are some tricks and function by using them you can
achieve the functionality of converting multiple rows in one comma separated
string and converting comma separated string into multiple rows.
1. Create Temp Table:
Create one temp table and insert sample record in it:
insert into #temp values ( 'a.@gamil')
insert into #temp values( 'b.@gamil')
insert into #temp values( 'c.@gamil')
Select * from #temp
![]() |
DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(@Names + ',', '') + email FROM #temp
Select @Names as Emails
By using COALESCE function and Concatenate function you can achieve concatenating "," and multiple rows
COALESCE
is ANSI Standard function which is used to check Isnull value in Expression and it return other not null value if found Null in expression.
The Coalesce() function returns the first non-null value among its arguments. This function doesn't limit the number of arguments, but they must all be of the same data type.
The data type of a
COALESCE
expression is the data type of the input with the highest data type precedence. If all inputs are un-typed NULL
s, then an error will be returned.
converting comma separated string into multiple rows.
DECLARE @S varchar(max),
@Split char(1),
@X xml
SELECT @S = 'a.@gamil,b.@gamil,c.@gamil',
@Split = ','
SELECT @X = CONVERT(xml,'<root><s>' + REPLACE(@S,@Split,'</s><s>') + '</s></root>')
SELECT [Value] = T.c.value('.','varchar(20)')
FROM @X.nodes('/root/s') T(c)
Here we are converting comma separated string into format for XML tags and value by using Replace Function. After converting whole comma separated string into XML format, by using XML FROM @X.nodes('/root/s') T(c) query we are reading values from XML string and it returns values into multiple rows.
Note: While using this functionality we have to consider the limitation of SQL server Varchar datatype for size. If it exceed the limitation of 4000 size then you can not achieve the excepted functionality.
Comments
Post a Comment