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
x
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)