Функция SQL Server не обеспечивает ожидаемого результата - PullRequest
0 голосов
/ 23 октября 2019

Я создал функцию 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', то результаты не будут возвращены.

...