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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение 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.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Polimer
Местный житель
Сообщения: 489
Зарегистрирован: 27 янв 2006, 12:46
Откуда: Москва

Сообщение Polimer »

Есть ХП в Г. - na_getnextnrec, вызывая в цикле можно получить максимальный нрек.
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

Офигенно - все заработало! Спасибо огроменное!)
Ответить