Вот ситуация, с которой я сейчас борюсь.
У меня есть две таблицы: Pro1
, Pro2
(справочная таблица)
Pro1 : ID int, ProviderID1 varchar(25)
Pro2 : ID int, ProviderID2 varchar(25)
Вот эта вещь. Оба ProviderIDs
(1,2) всегда ABCxxxxxxxxxxxx
(всего 15) с префиксом ABC. pro2
также заполняется другими префиксами, но нас это не интересует.
Теперь мне нужно заполнить pro1.ProviderID
согласно:
- регистрация
pro2
максимальное значение where ProviderID2 like 'ABC%'
- теперь для
providerID1
добавьте 1 к существующему максимальному providerid2
- , если не найдено в
pro2
, то сгенерировать новый providrid1 с префиксом abc- "ABC000000000100"
- продолжайте добавлять 1 для следующего
providerid1
.
* +1040 * Пример: * * тысяча сорок один
скажем, в
pro2
,
MAX(providerID2)
найдено
ABC000000000111
поэтому в
pro1
,
providerid1
он должен генерировать
ABC000000000112
и
ABC000000000113
для следующих
ID1
и т. д.
Если в pro2
НЕТ providerID2
, где providerid2 like 'ABC%'
, генерировать ABC000000000100
, ABC000000000101
для следующего и т. Д.
Обратите внимание, что providerid
ВСЕГДА должно быть ABC, за которым следует 12 целых чисел (всего 15).
Большое спасибо!
Вот что я использую:
IF (SELECT count(providerid2) FROM pro2 WHERE providerid2 like 'ABC%')>0
BEGIN
IF object_id('tempdb..#te') is not null
DROP TABLE #te
CREATE TABLE #te (id int,pid int,pid2 varchar(15),providerid1 varchar(20))
INSERT INTO #te (id)
SELECT id FROM pro1
DECLARE @oldID int
SET @oldID = (SELECT right (MAX(providerID2),12) FROM pro2 WHERE providerid2 like 'ABC%')
UPDATE #te
SET pID = new
FROM ( SELECT pid,new =
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) + @oldID end
FROM #te) #te
DECLARE @pid TABLE (pid int)
INSERT INTO @pid (pid) SELECT pid FROM #te
UPDATE #te
SET pid2 = (SELECT stuff(replicate('0',12),12 - len(pid) +1,12,pid))FROM #te
DECLARE @pid2 TABLE (pid2 int)
INSERT INTO @pid2 (pid2) SELECT pid2 FROM #te
UPDATE #te
SET providerID1 = 'ABC' + CONVERT(VARCHAR(15), pid2, 15) FROM #te
UPDATE pro1
SET providerID1 = #te.providerid1
FROM pro1
INNER JOIN #te on #te.id = pro1.ID
END
ELSE
IF object_id('tempdb..#tempr') is not null
DROP TABLE #tempr
CREATE TABLE #tempr (id int,pid int,pid2 varchar(15), providerID1 varchar(15))
INSERT INTO #tempr (id)
SELECT id FROM pro1
UPDATE #tempr
SET pID = new
FROM ( SELECT pid,new =
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) + 99 end
FROM #tempr) #tempr
DECLARE @pi TABLE (pid int)
INSERT INTO @pi (pid) SELECT pid FROM #tempr
UPDATE #tempr
SET pid2 = (SELECT stuff(replicate('0',12),12 - len(pid) +1,12,pid)) FROM #tempr
DECLARE @pi2 TABLE (pid2 int)
INSERT INTO @pi2 (pid2) SELECT pid2 FROM #tempr
UPDATE #tempr
SET providerID1 = 'ABC' + CONVERT(VARCHAR(15), pid2, 15) FROM #tempr
UPDATE pro1
SET providerID1 = #tempr.providerid1
FROM pro1
INNER JOIN #tempr on #tempr.id = pro1.ID