Проблема с отсутствием результата при использовании материала - PullRequest
0 голосов
/ 04 августа 2020

Я использую функцию stuff для создания значения, разделенного запятыми.

stuff работает, если я запускаю его самостоятельно, но когда я использую в сочетании с другим столбцом для проверки, он не работает.

Это связано с проблемой типа данных?

Вот мой код

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,'')

    
    

Вышеупомянутое не дает результатов, даже электронные письма существуют в таблице, но приведенный ниже запрос работает, если я запускаю его один. Имеет ли это что-нибудь с trim или еще как?

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,'')

1 Ответ

0 голосов
/ 04 августа 2020

Если вы выполняете IN, вам не следует беспокоиться о создании строки, разделенной запятыми. Если вы используете строку с разделителями-запятыми, вам нужно использовать LIKE вместо IN. Должно быть что-то вроде этого ...

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)) + '%'

Или вы можете просто удалить элементы, разделенные запятыми, и сделать это ...

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...