I am using the stuff function to create an comma separated value
stuff works if I run it alone, but when I use in combination with another column to check against, it is failing.
Is it due to datatype issue?
Here is my code
and cast(verifyemails as varchar(max)) in (select STUFF((SELECT Distinct ',' + '''' + cast(emails as varchar(max)) + '''' from roleslist
left join users on users.fkuserid = roleslist.fkroleuserid
where
and fkUserID = 350
group by emails
FOR XML PATH('')), 1,1,'')
The above does not give the results, even the emails do exists in the table, but the below query is working if I run it alone. Does it have to anything with trim or anything?
select STUFF((SELECT Distinct ',' + '''' + cast(emails as varchar(max)) + '''' from roleslist
left join users on users.fkuserid = roleslist.fkroleuserid
where
and fkUserID = 350
group by emails
FOR XML PATH('')), 1,1,'')
Advertisement
Answer
If you’re doing an IN you shouldn’t bother creating a comma-delimited string. If you use a comma-delimited string you need to use LIKE instead of IN. Should be something like this…
and
(select STUFF((SELECT Distinct ',' + '''' + cast(emails as varchar(max)) + ''''
from roleslist
left join users
on users.fkuserid = roleslist.fkroleuserid
where fkUserID = 350
group by emails
FOR XML PATH('')), 1,1,'') LIKE '%' + cast(verifyemails as varchar(max)) + '%'
Or you could simply remove the comma-delimiting stuff and do this…
and cast(verifyemails as varchar(max)) in
(select cast(emails as varchar(max)) from roleslist
left join users
on users.fkuserid = roleslist.fkroleuserid
where fkUserID = 350
group by emails)