Добавление дубликата номера - PullRequest
0 голосов
/ 14 сентября 2018

В настоящее время у меня возникает следующая проблема.

Если вы посмотрите на приведенный ниже тестовый пример:

    declare @Count  int
    ,       @id     int =   777

    declare @table table
    (   id  int identity primary key
    ,   JCid    int
    ,   line    int
    ,   udf     float   )

    insert into @table (jcid,line,udf)
    values
    (777,1,1),
    (777,2,2.1),
    (777,3,2.2),
    (777,4,2),
    (777,5,3)


    select
        @Count  =   count(left(L.udf,1))
    from    @table L
    where   L.jcid  = @id
    group by left(L.udf,1)
    having count(left(L.udf,1))>1

    select  @Count

При запуске этого процесса я получаю желаемые результаты 3однако после разработки приведенного ниже триггера я не могу заставить счет работать правильно:

create trigger kv_trg_JobLineNumberUpdate_AW on _btblJCTxLines
after insert, update
as

declare @LineNum            float
,       @OldLine            float
,       @id                 int
,       @Count              int
,       @Err                nvarchar(500)

set @Err                =   '--------------------------';
set @Err                =   @Err    +   @Err    +   CHAR(10);
set @Err                =   @Err    +   CHAR(10);
set @Err                =   @Err    +   'You are not allowed to change this Line Number!';

select
    @LineNum    =   iLineID
,   @OldLine    =   isnull(ufJCTxCMLineNumber,0)
,   @id         =   iJCMasterID
from    inserted

select
    @Count  =   count(left(L.ufJCTxCMLineNumber,1))
from    _btblJCTxLines L
join    inserted i on left(L.ufJCTxCMLineNumber,1) = left(i.ufJCTxCMLineNumber,1)
where   L.iJCMasterID   = @id
group by left(L.ufJCTxCMLineNumber,1)
having count(left(L.ufJCTxCMLineNumber,1))>1

begin
    if  @OldLine    =   0
        begin
            if @Count   >=  2
                begin
                    update  _btblJCTxLines
                        set ufJCTxCMLineNumber      =   cast(@LineNum as varchar)+'.'+cast(@Count as varchar)
                    from    _btblJCTxLines  L
                    join    inserted on L.idJCTxLines   =   inserted.idJCTxLines
                end
            else
                begin
                    update  _btblJCTxLines
                        set ufJCTxCMLineNumber      =   @LineNum
                    from    _btblJCTxLines  L
                    join    inserted on L.idJCTxLines   =   inserted.idJCTxLines
                end
        end
    else
        begin
            select
                @OldLine        =   deleted.ufJCTxCMLineNumber
            ,   @LineNum        =   inserted.ufJCTxCMLineNumber
            from    inserted, deleted

                if  (@OldLine <> @LineNum)
                    begin
                        raiserror(@Err, 16, 1)
                        rollback tran
                        return;
                    end
        end
end
go

Поле ufJCTxCMLineNumber - это дублируемый номер, который я ищу.

Это срабатываетглавная цель - убедиться, что поле ufJCTxCMLineNumber никогда не имеет дубликатов.

Что происходит, пользователь вставляет новую строку, когда он добавляет новую строку над любой текущей строкой, я хочу, чтобы поле ufJCTxCMLineNumber обновлялось до3.1 в зависимости от количества дубликатов.

Как мне получить правильный счет?

Перейдите по этой ссылке для получения образцов данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...