Добрый день!
Есть таблица номеров банковских карт (#Cards) и есть таблица шаблонов номеров карт (#BIN), отвечающих определенным требованиям. Необходимо отобрать все карточки, номера которых подпадают хотя бы под один шаблон из таблицы #BIN.
К сожалению, не нашел более изящного варианта, чем через курсор, может подскажете, как это можно сделать лучше и быстрее?
--таблицы:
create table #Cards
(Numb varchar(18))
create table #BIN
(BIN varchar(18))
CREATE TABLE #ourbin
(
Bin varchar(18),
Numb varchar(18)
)
--номера карт (несколько тысяч номеров ежедневно)
insert into #Cards(Numb) values ('1234567812345678')
insert into #Cards(Numb) values ('1234567812346982')
insert into #Cards(Numb) values ('1234567834578686')
insert into #Cards(Numb) values ('3466877678802369')
insert into #Cards(Numb) values ('1234567789873245')
insert into #Cards(Numb) values ('5478134034772598')
insert into #Cards(Numb) values ('4579833468347672')
insert into #Cards(Numb) values ('4579543423455656')
--шаблоны (около 500 записей)
insert into #BIN(BIN) values ('12345678')
insert into #BIN(BIN) values ('123456')
insert into #BIN(BIN) values ('4579')
DECLARE @bin varchar(18)
DECLARE bin_cursor CURSOR
FOR SELECT BIN FROM #BIN
OPEN bin_cursor
FETCH NEXT FROM bin_cursor INTO @bin
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @bin=@bin+'%'
INSERT INTO #ourbin
SELECT @bin, c.Numb
FROM #Cards c
WHERE c.Numb like @bin
and not exists (SELECT #ourbin.Numb FROM #ourbin WHERE #ourbin.Numb=c.Numb)
FETCH NEXT FROM bin_cursor INTO @bin
END
DEALLOCATE bin_cursor
select * from #ourbin
drop table #Cards
drop table #BIN
drop table #ourbin