Я пытаюсь создать файл с фиксированной позицией и сталкиваюсь с ошибкой.По сути, мне нужно создать идентификатор, основанный на автоматическом номере.
У меня есть переменная, которая сообщает мне последний использованный номер.Так, например:
DECLARE @lastNumUsed int = 1
Проведя некоторое онлайн-исследование, я думаю, что смогу сделать это с помощью курсора.Я не знаком с курсорами, поэтому терпите меня.
Моя конечная цель заключается в следующем: если у меня есть 3 payeeIDs EX: 101 110 165
Мне нужно найти последний использованный видео (1) и назначьте 101 на 2, 110 на 3, 165 на 4.
Прямо сейчас я получаю:
2 3 3
Обратите внимание, что vid - это nvarchar, потому что этоНомер - это только первый шаг в создании того, что мне нужно.в конечном итоге это будет буквенно-цифровое поле.
Может ли кто-нибудь указать мне правильное направление?
DECLARE @payeeID int;
DECLARE @vid as nvarchar(12);
DECLARE @VIDCursor as CURSOR;
SET @VIDCursor = CURSOR FOR
select
distinct @payeeID
,@VIDCursor
from #tmpTable;
Open @VIDCursor;
FETCH NEXT FROM @VIDCursor INTO @payeeID, @vid;
WHILE @@Fetch_Status = 0
BEGIN
Print @vid
FETCH NEXT FROM @VIDCursor INTO @payeeID, @vid
Set @vid = @vid + 1
END
Close @VIDCursor;
Deallocate @VIDCursor;
Обновление: я считаю, что приведенные ниже ответы намного лучше, но если кто-то сочтет это полезным, язаставил курсор работать, но я буду обновлять свой код, чтобы не использовать курсор, и вместо этого буду использовать row_number ().
DECLARE @payeeID int;
DECLARE @vid int
Create TABLE #tmpTable
(
payeeID int,
vid int
)
DECLARE @VIDCursor as CURSOR;
SET @VIDCursor = CURSOR FOR
select
distinct payeeID
from #tmpItemizedDetails;
Open @VIDCursor;
FETCH NEXT FROM @VIDCursor INTO @payeeID;
WHILE @@Fetch_Status = 0
BEGIN
Set @vid = @vid + 1
Insert into #tmpVoucherNumbers values (@payeeID,@vid );
FETCH NEXT FROM @VIDCursor INTO @payeeID
END
Close @VIDCursor ;
Deallocate @VIDCursor ;