Получение последней записи (но по поиску не нашел)

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Получение последней записи (но по поиску не нашел)

Сообщение Snussi » 10.11.2005 (Чт) 13:51

Итак, по порядку.
База - MS SQL 2000

Есть 2 таблицы:
Код: Выделить всё

CREATE TABLE [CalendarWatcherMainTable] (
   [ID] [bigint] IDENTITY (1, 1) NOT NULL ,
   [ActionComment] [text] COLLATE Cyrillic_General_BIN NOT NULL CONSTRAINT [DF_CalendarWatcherMainTable_ActionComment] DEFAULT (''),
   CONSTRAINT [PK_CalendarWatcherMainTable] PRIMARY KEY  CLUSTERED
   (
      [ID]
   )  ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


CREATE TABLE [CalendarWatcherSubTable] (
   [ID] [bigint] IDENTITY (1, 1) NOT NULL ,
   [ParentID] [bigint] NOT NULL CONSTRAINT [DF_CalendarWatcherSubTable_ParentID] DEFAULT (0),
   [CodeType] [int] NOT NULL CONSTRAINT [DF_CalendarWatcherSubTable_CodeType] DEFAULT (0),
   [Code] [varchar] (20) COLLATE Cyrillic_General_BIN NOT NULL CONSTRAINT [DF_CalendarWatcherSubTable_Code] DEFAULT ('')
) ON [PRIMARY]


Соответственно, ParentID 2-ой таблицы - это значение ID первой.

Теперь задача - вставить одну строку в 1-ю и несколько строк во 2-ю, при этом их ParentID должен совпасть c ID первой таблицы, который просто автоматически увеличивается.

Как после операции INSERT получить присвоенный ID?
Если бы у меня было односеансовое предложение, то просто - последняя строка.
Беда в том, что одновременно может ломиться несколько клиентов, и не факт, что в между инсертом и селектом не затесается еще один инсерт.
Как быть?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.11.2005 (Чт) 13:54

Используй транзакции.
Lasciate ogni speranza, voi ch'entrate.

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 10.11.2005 (Чт) 14:08

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

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 10.11.2005 (Чт) 14:19

Код: Выделить всё
select @@IDENTITY

после вставки главной записи - это и будет твой новый ключ для вставки во вторую таблицу

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 10.11.2005 (Чт) 14:53

О, спасибо!

Хелп помог :)


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList