SQL Server - Identity column as a primary key

User avatar
AnyaGal
Уже с Приветом
Posts: 5771
Joined: 02 Dec 1999 10:01
Location: Saint-Petersburg --> Bellevue, WA

Post by AnyaGal »

Dima, спасибо, но масштаб у этого проэкта я надеюсь другой.
:)
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Post by katit »

А. Вы про это.
У нас такого не бывает. Т.е. Вставляется или одна запись или множество.

Во втором случае всегда есть #таблица в которой все накапливается.
Далее вызывается другая СП:

Code: Select all

if @iFrequency = 0
    begin
        select @oStartKey = 0
        select @oEndKey = 0
        return
    end

    set ARITHIGNORE on
    begin transaction
    update tciSurrogateKey
        set NextKey = case NextKey + @iFrequency
                    when null then @iFrequency + 1  -- in case of overflow
                    else NextKey + @iFrequency
                    end
        where TableName = @iTableName

    if @@rowcount = 0
    begin   
        insert tciSurrogateKey
            (TableName
            ,NextKey)
        values (@iTableName
            ,@iFrequency + 1)
    end
   
    select @oStartKey = case NextKey
                    when @iFrequency + 1 then 1
                    else NextKey - @iFrequency
                    end
    from tciSurrogateKey
    where TableName = @iTableName

    select @oEndKey = @oStartKey + @iFrequency - 1

    commit transaction


И после эти дела UPDATE загоняются в #таблицу. Далее идет простой INSERT
[/code]
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Понятно, согласен
Когда логика такая то конечно проблемы нет
Сейчас прочто часто системы где после begin transaction идет вызов метода CreateSomeDocumentsBasedOnOurBusinessLogic, and you have no idea what kind of documents will be created, and how many
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Sergey___K
Уже с Приветом
Posts: 13014
Joined: 10 Jul 2001 09:01
Location: VA

Post by Sergey___K »

Смотрите, осторожно с Access'овскими AutoIncrement. Например, если из таблицы удалить все записи, а потом сделать Repair, Compact, то она начнет нумеровать сначала. Если ваша Referential Integrity фиговая (а я так понял, что фиговая), то будете иметь с этого потенциальные проблемы,. Если вам так уже влом делать синтетический PK, гляньте на Replication ID, как подтип AutoIncrement.

Return to “Вопросы и новости IT”