Конференция "Базы" » ID последней добавленной записи [D7, любая СУБД]
 
  • Ega23 © (04.09.08 12:51) [20]

    > Все верно. ПО относительно несложное, но многопользовательское
    > все же.


    выноси общение с СУБД на уровень абстракции. Для каждой - реализация своя; то, что с этой абстракцией работает, про СУБД ничего не знает.
    В конце-концов, ключевое поле на клиенте - вещь вообще абстрактнее некуда.
  • Правильный$Вася (04.09.08 12:58) [21]

    > Ega23 ©   (04.09.08 12:51) [20]

    да, по сути - нужен модуль-посредник, который для каждой субд будет свой, а интерфейс к нему от основной функциональности - единый
  • Ega23 © (04.09.08 13:00) [22]

    > да, по сути - нужен модуль-посредник, который для каждой
    > субд будет свой, а интерфейс к нему от основной функциональности
    > - единый


    Угу.
  • stas © (04.09.08 13:05) [23]
    >DVM ©   (04.09.08 12:25) [7]
    Заключить в одну транзакцию.

    >Ega23 ©   (04.09.08 12:32) [11]
    может конечно быть минимальным

    >Ega23 ©   (04.09.08 12:31) [10]
    >Расстрелять из пулемёта за такое.
    Возможно, но это единственный  способ, который будет работать с любой БД.
  • Игорь Шевченко © (04.09.08 13:06) [24]

    > Возможно, но это единственный  способ, который будет работать
    > с любой БД.


    ты бредишь
  • Sergey13 © (04.09.08 13:09) [25]
    > [13] DVM ©   (04.09.08 12:36)
    > Не очень понял. Поясни.

    Ну в принципе

    > [16] Ega23 ©   (04.09.08 12:38)
    > Ну что-то типа интербэйзного генератора

    Есть таблица с двумя полями Table_name и Current_Id. Пишется функция, которая на входе получает имя таблицы а на выходе отдает текущее знгачение+1, меняя содержимое соответствующего поля. Все ключи заполняются через эту функцию. Опросив текущее значение получаешь искомое.
    Но это не решение - это идея для решения. Потому что это надо очень задуматься о конкуренции на эту таблицу.
  • Ega23 © (04.09.08 13:18) [26]

    > может конечно быть минимальным


    1. Ты удивишься, но я тебе могу написать запрос для MSSQL, который будет вставлять значение в "дырку" для Identity-поля.
    2. Ключ и не автоинкриментом может быть. Но при этом не перестаёт быть ключом.
  • Ega23 © (04.09.08 13:19) [27]

    > ты бредишь


    +1
  • DVM © (04.09.08 13:24) [28]

    > Sergey13 ©   (04.09.08 13:09) [25]

    Теперь ясно, спасибо.
  • stas © (04.09.08 13:28) [29]
    Ega23 ©   (04.09.08 13:18) [26]

    1. Ты уверен что scope_identity() в этом варианте тебе вернет верное значение?
    2.

    > Одним из полей таблицы является автоинкрементное поле
    > счетчик (ID)
    .
    > После добавления записи в таблицу мне нужно получить значение
    > поля ID для этой добавленной записи.
  • Правильный$Вася (04.09.08 13:29) [30]

    > stas ©   (04.09.08 13:28) [29]

    это автоинкрементное поле счетчик (ID) только в голове автора, т.к. СУБД абстрактная, то это не более, чем идея, а не способ реализации
  • Ega23 © (04.09.08 13:31) [31]

    > 1. Ты уверен что scope_identity() в этом варианте тебе вернет
    > верное значение?


    А ты уверен, что scope_identity() тебе вообще что-то вернёт в этом случае?
    смотри в сторону SET IDENTITY_INSERT ON/OFF
  • Johnmen © (04.09.08 13:34) [32]

    > DVM ©   (04.09.08 12:03) 

    В данных условиях я бы генерил уникальное значение на клиенте. (Ну понятное дело, что не 100% уникальное:))

    > Игорь Шевченко ©   (04.09.08 13:06) [24]
    > ты бредишь

    Причем делает это перманентно в на разные темы...
  • stas © (04.09.08 13:49) [33]
    Ega23 ©   (04.09.08 13:31) [31]
    Ну, так тогда о чем вообще разговор?
    Узнать в любой базе последний вставленый ID?  
    а если было сразу вставлено 5 строк?
    а как решит проблему модуль-посредник если этот ID надо использовать в дальнеших инструкциях запроса?
    И насколько сложная и ответственная задача чтобы это все городить?
    Johnmen ©   (04.09.08 13:34) [32]
    генеальное решение. :-D
  • Ega23 © (04.09.08 14:31) [34]

    > а как решит проблему модуль-посредник если этот ID надо
    > использовать в дальнеших инструкциях запроса?


    Если надо использовать - то используй, тебе никто не мешает.

    declare @ID uniqueidentifier;
    Set @ID=:ID
    Set NoCount On

    Insert into Table1 (ID, .....) Values (@ID, .....);
    Insert into Table2 (ID, .....) Values (@ID, .....);
    /*
     Используем @ID так, как хочеццо.

    */

  • stas © (04.09.08 14:34) [35]
    Ega23 ©   (04.09.08 14:31) [34]

    Типа такого:
    declare @ID  int
    Insert into...
    Set @ID=scope_identity()

    Insert into ... Values (@ID)

  • Ega23 © (04.09.08 14:45) [36]

    > Типа такого:


    Что типа такого? Ещё раз: я могу в таблицу с Identity-полем вставить в "дырку" ключевое значение, отключив на время Identity. И твой скрипт в этом случае:
    а) пойдёт лесом.
    б) даже если и не пойдёт, то будет работать только под mssql.
  • stas © (04.09.08 16:26) [37]
    Ega23 ©   (04.09.08 14:45) [36]

    1. Опять же,  что автору требуется?
    2. Какой скрипт не пойдет лесом?
  • Johnmen © (04.09.08 16:34) [38]

    > stas ©   (04.09.08 16:26) [37]
    > Опять же,  что автору требуется?

    Ты не только бредишь в ответах, но и принципиально не читаешь постановку вопроса ветки?
    Или же первое - результат второго?
    Просто интересно...
  • stas © (04.09.08 16:40) [39]
    Johnmen ©   (04.09.08 16:34) [38]
    более глупого поста чем Johnmen ©   (04.09.08 13:34) [32]
    в этой ветке небыло.
 
Конференция "Базы" » ID последней добавленной записи [D7, любая СУБД]
Есть новые Нет новых   [134477   +43][b:0][p:0.001]