Есть ли другой способ написать этот запрос? (Я получаю «Подзапрос возвратил более 1 значение ошибки» - PullRequest
0 голосов
/ 07 февраля 2019

Я создаю функцию, в которой мне нужно передать несколько идентификаторов (предположим, A.id) (int) в виде значений, разделенных запятыми, как (2,3), и результатом будут значения (int), связанные с этими идентификаторами.Предположим, что если я передал (2,3), результат должен быть похож на (8,9,7,5).

declare @roleid varchar(max)  
set @roleid=(select mr.Id from M_Organization mo
join m_role mr on mr.Id=mo.RoleId 
cross apply STRING_SPLIT ('3,4', ',') cs WHERE mo.Id IN (cs.value)
)
select @roleid

Он показывает следующую ошибку:

Подзапрос возвращенболее 1 значение.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы можете попробовать это

declare @roleid varchar(max)  
set @roleid=(select top 1 mr.Id from M_Organization mo
join m_role mr on mr.Id=mo.RoleId 
cross apply STRING_SPLIT ('3,4', ',') cs WHERE mo.Id IN (cs.value)
)
select @roleid
0 голосов
/ 07 февраля 2019

Вы можете использовать ТОП 1 в запросе.Потому что вы присваиваете значение переменной, и оно принимает только одно возвращаемое значение из запроса.

declare @roleid varchar(max)  
set @roleid=(select TOP 1 mr.Id from M_Organization mo
join m_role mr on mr.Id=mo.RoleId 
cross apply STRING_SPLIT ('3,4', ',') cs WHERE mo.Id IN (cs.value)
)
select @roleid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...