none
гарантирует ли sequence соблюдение последовательности? RRS feed

  • 问题

  • Добрый день!

    гарантирует ли sequence соблюдение последовательности? такой вопрос появился после обнаружения задвоенных идентификаторов в таблице. Версия ms sql 2017

    2022年8月28日 15:01

答案

  • Я имел в виду, если одно и то же значение добавляется например в три таблицы сразу, то есть ли двойники во всех трех или, например, только в одной.

    В любом случае с моей точки зрения двойников быть не должно. Но всегда возможны какие либо ошибки, как в софте, так и в железе. 

    Если это проблема которая должна быть решена, то возможное варианты мы уже обсудили. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    2022年8月29日 16:29
    版主
  • Sequence прямого отношения к таблицам не имеет, это просто источник последовательности. Если на самой таблице нет нужных ограничений, то никто не помешает вам добавлять одинаковые значения намеренно или из за ошибки.

    Далее, sequence может быть настроена произвольным образом, например на выдачу последовательности 1,2,3... Значение в этом случае будет повторяться.

    Если вам требуются уникальные значения, то наверное следует сделать это на самой таблице, например используя identity.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    2022年8月28日 17:17
    版主

全部回复

  • Sequence прямого отношения к таблицам не имеет, это просто источник последовательности. Если на самой таблице нет нужных ограничений, то никто не помешает вам добавлять одинаковые значения намеренно или из за ошибки.

    Далее, sequence может быть настроена произвольным образом, например на выдачу последовательности 1,2,3... Значение в этом случае будет повторяться.

    Если вам требуются уникальные значения, то наверное следует сделать это на самой таблице, например используя identity.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    2022年8月28日 17:17
    版主
  • Если погрузится в детали, есть процедура, где примерно такой код:

    select @id= NEXT VALUE FOR contacts_seq;
    
    insert into t (id,....)
    values (@id,...)

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

    identity не используется намеренно, последовательность используется для нескольких таблиц. Понятно, чтоб избежать дублей нужно создать ключ, но тут вопрос скорее теоретический, а ни как нормализацию соблюсти.

    2022年8月28日 17:53
  • Как на счет изменения значения после добавления? 

    Если значение всегда используется в нескольких таблицах, то наблюдаются ли двойники во всех таблицах или только в некоторых?



    This posting is provided "AS IS" with no warranties, and confers no rights.

    2022年8月28日 18:10
    版主
  • "Как на счет изменения значения после добавления? " - не может быть, случилось в момент insert'а . В аудите это видно.

    "во всех таблицах " - в некоторых есть, но происходит крайне редко, раз в год примерно. В своем примере просто упростил.

    2022年8月28日 18:29
  • Я имел в виду, если одно и то же значение добавляется например в три таблицы сразу, то есть ли двойники во всех трех или, например, только в одной.

    В любом случае с моей точки зрения двойников быть не должно. Но всегда возможны какие либо ошибки, как в софте, так и в железе. 

    Если это проблема которая должна быть решена, то возможное варианты мы уже обсудили. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    2022年8月29日 16:29
    版主
  • ок, спасибо
    2022年8月29日 19:17