Будьте осторожны, я новичок в SQL. У меня есть таблица с именем autonumber_settings, как это:
Prefix | AutoNumber
SO | 112320
CA | 3542
A при создании новой строки продаж вызывается хранимая процедура, которая считывает текущее значение автонумерации из строки «SO», затем увеличивает число, обновляет эту же строку и возвращает номер обратно из хранимой процедуры. Хранимая процедура ниже:
ALTER PROCEDURE [dbo].[GetAutoNumber]
(
@type nvarchar(50) ,
@out nvarchar(50) = '' OUTPUT
)
as
set nocount on
declare @currentvalue nvarchar(50)
declare @prefix nvarchar(10)
if exists (select * from autonumber_settings where lower(autonumber_type) = lower(@type))
begin
select @prefix = isnull(autonumber_prefix,''),@currentvalue=autonumber_currentvalue
from autonumber_settings
where lower(autonumber_type) = lower(@type)
set @currentvalue = @currentvalue + 1
update dbo.autonumber_settings set autonumber_currentvalue = @currentvalue where lower(autonumber_type) = lower(@type)
set @out = cast(@prefix as nvarchar(10)) + cast(@currentvalue as nvarchar(50))
select @out as value
end
else
select '' as value
Теперь есть еще одна процедура, которая обращается к той же таблице, которая дублирует заказы, копируя как заголовок, так и строки. Иногда дублирование приводит к дублированию номеров строк. Вот часть этой процедуры:
BEGIN TRAN
IF exists
(
SELECT *
FROM autonumber_settings
WHERE autonumber_type = 'SalesOrderDetail'
)
BEGIN
SELECT
@prefix = ISNULL(autonumber_prefix,'')
,@current_value=CAST (autonumber_currentvalue AS INTEGER)
FROM autonumber_settings
WHERE autonumber_type = 'SalesOrderDetail'
SET @new_auto_number = @current_value + @number_of_lines
UPDATE dbo.autonumber_settings
SET autonumber_currentvalue = @new_auto_number
WHERE autonumber_type = 'SalesOrderDetail'
END
COMMIT TRAN
Любые идеи о том, почему эти две процедуры, кажется, не сочетаются друг с другом, иногда давая одинаковые номера строк, созданные с нуля, как строки, созданные дублированием.