Страница 1 из 1

Получение нового значения NREC в MS SQL 2005

Добавлено: 25 дек 2008, 14:07
Vik
Добрый день, такой вопрос. Я написал хранимую процедуру, которая парсит XML и вставляет данные в нужные таблицы Галактики. Как можно узнать значение нового Nrec до вставки в таблицы БД? Нет ли какой-либо функции по типу GetNextNrec випа? У меня написана такая процедура, для получения нрека:

Код: Выделить всё

create procedure [dbo].[GetNextNrec]
(
 @TableName  varchar(44),
 @NextNrec   varbinary(8) output
)
as
begin
declare @OldNrec       varbinary(8),
           @SQLString     nvarchar(80),
           @Params        nvarchar(30)
set     @SQLString= 'select @OldNrec = max(F$NREC) from ' + TableName
set     @Params= '@OldNrec varbinary(8) output'

exec sp_executesql   @SQLString,
                               @Params   ,
                              @OldNrec= @OldNrec output

if (@OldNrec)is null
begin
  set  @NextNrec = 0x800100000000000F
end
else
begin
  set  @NextNrec = master.dbo.GalCompAsBinary(master.dbo.BinaryAsGalComp(@OldNrec) + 1)
end
end
Она отлично отрабатывает, получает новый уникальный нрек на текущий момент, но.. Проблема в том, что при занесении далее данных из интерфейсов Галактики в таблицу, в которую хранимой процедурой была произведена до этого вставка из XML с нреком, полученным моей функцией, создается нрек дублирующий мой и как результат - tsDuplicateKey :( Подскажите, как быть, если есть идеи. Очень надо! Спасибо! Галактика - восьмерка, СУБД MS SQL 2005.

Добавлено: 25 дек 2008, 14:19
Den

Добавлено: 25 дек 2008, 14:30
Polimer
Есть ХП в Г. - na_getnextnrec, вызывая в цикле можно получить максимальный нрек.

Добавлено: 25 дек 2008, 15:38
Vik
Офигенно - все заработало! Спасибо огроменное!)