-
> Все верно. ПО относительно несложное, но многопользовательское
> все же.
выноси общение с СУБД на уровень абстракции. Для каждой - реализация своя; то, что с этой абстракцией работает, про СУБД ничего не знает.
В конце-концов, ключевое поле на клиенте - вещь вообще абстрактнее некуда.
-
> Ega23 © (04.09.08 12:51) [20]
да, по сути - нужен модуль-посредник, который для каждой субд будет свой, а интерфейс к нему от основной функциональности - единый
-
> да, по сути - нужен модуль-посредник, который для каждой
> субд будет свой, а интерфейс к нему от основной функциональности
> - единый
Угу.
-
>DVM © (04.09.08 12:25) [7]
Заключить в одну транзакцию.
>Ega23 © (04.09.08 12:32) [11]
может конечно быть минимальным
>Ega23 © (04.09.08 12:31) [10]
>Расстрелять из пулемёта за такое.
Возможно, но это единственный способ, который будет работать с любой БД.
-
> Возможно, но это единственный способ, который будет работать
> с любой БД.
ты бредишь
-
> [13] DVM © (04.09.08 12:36)
> Не очень понял. Поясни.
Ну в принципе
> [16] Ega23 © (04.09.08 12:38)
> Ну что-то типа интербэйзного генератора
Есть таблица с двумя полями Table_name и Current_Id. Пишется функция, которая на входе получает имя таблицы а на выходе отдает текущее знгачение+1, меняя содержимое соответствующего поля. Все ключи заполняются через эту функцию. Опросив текущее значение получаешь искомое.
Но это не решение - это идея для решения. Потому что это надо очень задуматься о конкуренции на эту таблицу.
-
> может конечно быть минимальным
1. Ты удивишься, но я тебе могу написать запрос для MSSQL, который будет вставлять значение в "дырку" для Identity-поля.
2. Ключ и не автоинкриментом может быть. Но при этом не перестаёт быть ключом.
-
> ты бредишь
+1
-
> Sergey13 © (04.09.08 13:09) [25]
Теперь ясно, спасибо.
-
Ega23 © (04.09.08 13:18) [26]
1. Ты уверен что scope_identity() в этом варианте тебе вернет верное значение?
2.
> Одним из полей таблицы является автоинкрементное поле
> счетчик (ID).
> После добавления записи в таблицу мне нужно получить значение
> поля ID для этой добавленной записи.
-
> stas © (04.09.08 13:28) [29]
это автоинкрементное поле счетчик (ID) только в голове автора, т.к. СУБД абстрактная, то это не более, чем идея, а не способ реализации
-
> 1. Ты уверен что scope_identity() в этом варианте тебе вернет
> верное значение?
А ты уверен, что scope_identity() тебе вообще что-то вернёт в этом случае?
смотри в сторону SET IDENTITY_INSERT ON/OFF
-
> DVM © (04.09.08 12:03)
В данных условиях я бы генерил уникальное значение на клиенте. (Ну понятное дело, что не 100% уникальное:))
> Игорь Шевченко © (04.09.08 13:06) [24]
> ты бредишь
Причем делает это перманентно в на разные темы...
-
Ega23 © (04.09.08 13:31) [31]
Ну, так тогда о чем вообще разговор?
Узнать в любой базе последний вставленый ID?
а если было сразу вставлено 5 строк?
а как решит проблему модуль-посредник если этот ID надо использовать в дальнеших инструкциях запроса?
И насколько сложная и ответственная задача чтобы это все городить?
Johnmen © (04.09.08 13:34) [32]
генеальное решение. :-D
-
> а как решит проблему модуль-посредник если этот ID надо
> использовать в дальнеших инструкциях запроса?
Если надо использовать - то используй, тебе никто не мешает.
declare @ID uniqueidentifier;
Set @ID=:ID
Set NoCount On
Insert into Table1 (ID, .....) Values (@ID, .....);
Insert into Table2 (ID, .....) Values (@ID, .....);
/*
Используем @ID так, как хочеццо.
*/
-
Ega23 © (04.09.08 14:31)
[34]Типа такого:
declare @ID int
Insert into...
Set @ID=scope_identity()
Insert into ... Values (@ID)
-
> Типа такого:
Что типа такого? Ещё раз: я могу в таблицу с Identity-полем вставить в "дырку" ключевое значение, отключив на время Identity. И твой скрипт в этом случае:
а) пойдёт лесом.
б) даже если и не пойдёт, то будет работать только под mssql.
-
Ega23 © (04.09.08 14:45) [36]
1. Опять же, что автору требуется?
2. Какой скрипт не пойдет лесом?
-
> stas © (04.09.08 16:26) [37]
> Опять же, что автору требуется?
Ты не только бредишь в ответах, но и принципиально не читаешь постановку вопроса ветки?
Или же первое - результат второго?
Просто интересно...
-
Johnmen © (04.09.08 16:34) [38]
более глупого поста чем Johnmen © (04.09.08 13:34) [32]
в этой ветке небыло.