Запрос, который я буду использовать для получения результата:
SELECT Id, Number FROM MyView WHERE Номер IN ('241113', '241000')
Вот как вы можете написать этот запрос.Нет необходимости генерировать числа.
declare @T table
(
Id int,
Number int,
[From] int,
[To] int
)
insert into @T values
(1, 241100, NULL, NULL),
(2, 241110, 111, 115)
select T.Id, V.Number
from @T as T
inner join (values (241113),
(241100)) as V(Number)
on V.Number between T.Number and T.Number + isnull(T.[To], 0)
Версия, в которой вы вместо этого помещаете искомые числа в табличную переменную.
declare @V table(Number int)
insert into @V values(241100)
insert into @V values(241113)
select T.Id, V.Number
from @T as T
inner join @V as V
on V.Number between T.Number and T.Number + isnull(T.[To], 0)
Я не использовал From
в любом месте, потому что мне неясно, какие значения возможны в этом столбце, кроме null
и number+1
.
И версия, в которой вы генерируете числа перед их фильтрацией.Результат тот же, и я считаю, что производительность не так хороша.
;with C as
(
select T.Id,
T.Number
from @T as T
union all
select T.Id,
C.Number + 1
from @T as T
inner join C
on C.Id = T.Id
where stuff(C.Number, 1, 3, '') < T.[To]
)
select Id, Number
from C
where Number in ('241113', '241100')