Я создал функцию SQL Server для возврата результатов на основе двух условий фильтрации. В функции TVF у меня есть только один запрос на выборку, где результаты будут возвращены в табличном формате. Когда я запускаю запрос на выборку, ожидаемые результаты были возвращены, но когда я выполняю тот же запрос через функцию, тогда результаты неверны. Посоветуйте, пожалуйста, то, что происходит в SQL для TVF.
Функция не возвращает ожидаемые результаты, когда мы передаем больше значений в параметрах.
Пример данных таблицы:
answer_tag answer_text
-----------------------
TNBPDS1 250
TSMMBPDS 100
Мой код:
Create function [dbo].[OBSLookupByAnswerTextTagX]
(@pObsId int,
@pObsSeq tinyint,
@pAnswerTag varchar(10))
return @ReturnTable table
(
id int identity(1,1),
answer_text varchar(max),
answer_tag varchar(max)
)
begin
Insert into @ReturnTable (answer_text, answer_tag)
select distinct ansr.answer_text, ansr.answer_tag
from grp_bu_bs gbus
inner join benefit_summary bsum on (gbus.summary_id = bsum.summary_id)
inner join answer ansr on (gbus.summary_id = ansr.summary_id)
where
gbus.grp_prod_id = @pObsId
and gbus.grp_prod_seq = @pObsSeq
and @pAnswerTag like '%' + (ansr.answer_tag) + '%'
return
end
Ниже запроса select из функции, которая дает ожидаемый результат, когда мы выполняем запрос как отдельный оператор SELECT
.
select distinct ANSR.answer_text,ANSR.answer_tag
from grp_bu_bs GBUS
inner join benefit_summary BSUM on (GBUS.summary_id = BSUM.summary_id)
inner join answer ANSR on (GBUS.summary_id = ANSR.summary_id)
where
GBUS.grp_prod_id = '189523'
and GBUS.grp_prod_seq = '31'
and 'TNBPDS1,TSMMBPDS,TNBPDS12,TNBPDSL3,TNBPDSD,TNBPDSAL' like '%' + ANSR.answer_tag) + '%'
Если у нас есть тег 'TNBPDS1'
тогда 250
должен быть возвращен.
Если мы передадим параметр как 'TNBPDS1,TSMMBPDS,TNBPDS12,TNBPDSL3,TNBPDSD,TNBPDSAL'
, результаты будут возвращаться, как и ожидалось.
Но если мы передадим параметр как 'TSMMBPDS,TNBPDS1,TNBPDS12,TNBPDSL3,TNBPDSD,TNBPDSAL'
, то результаты не будут возвращены.