![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Каким образом получить только что вставленную в таблицу базы? [MSSQL]
Lex_! © (2006-06-21 10:39:00)Доброго времени суток.
Вопрос собственно: каким образом можно получить только что вставленную запись? Допустим в запросе, при вставлении записи генерируется id (уникальный идентификатор вида: {F3758C08-7BA6-4251-8BC3-C2A4476E17D3}) - каким образом можно сразу же получить этот идентификатор? (с момента вставки записи и до момента выполнения запроса на выборку может быть вставлено еще несколько записей... )
Ega23 (2006-06-21 11:38:00) [41]
> функция newid работает как генератор - вне контекста транзакций?
NEWID
Creates a unique value of type uniqueidentifier.
А в констексте транзакции или нет - какая, собственно говоря, разница?
З.Ы. В MSSQL нет генераторов.
Ega23 (2006-06-21 11:35:00) [42]
> не вижу ЛОЛа, два человека открывают страницу, выполняется
> два экземпляра кода, в разных потоках, и одновременно вполне
> может выполняться и с десяток таких запросов...
Запросы не могут выполнятся ОДНОВРЕМЕННО. Как минимум из-за того, что процессор - один. Всегда есть очередь исполнения. Если код в [2] выполнять одним запросов, то хоть миллион пользователей в одну секунду обратятся к БД - всё выполнится строго по очереди.
> GUID всегда дается разный? ...
Естественно.
Val (2006-06-21 11:34:00) [43]>[9] Ega23 © (21.06.06 11:30)
функция newid работает как генератор - вне контекста транзакций?
Lex_! (2006-06-21 11:33:00) [44]
> > Просто одновременно могут выполняться запросы два одинаковых
>
>
> ЛОЛ
не вижу ЛОЛа, два человека открывают страницу, выполняется два экземпляра кода, в разных потоках, и одновременно вполне может выполняться и с десяток таких запросов...
GUID всегда дается разный? ...
Ega23 (2006-06-21 11:30:00) [45]
> Просто одновременно могут выполняться запросы два одинаковых
ЛОЛ
> и одновременно в двух получится одинаковый guid
А это - просто шедевр. GUID он потому GUID и называется.
Lex_! (2006-06-21 11:25:00) [46]Просто одновременно могут выполняться запросы два одинаковых .. и одновременно в двух получится одинаковый guid
Lex_! (2006-06-21 11:24:00) [47]Хотя будем надеяться, что все будет ок...
Спасибо, пойду попробую ..
Ega23 (2006-06-21 11:24:00) [48]
> Select @GUID=newid()
> ..... та же проблема, запросов ОЧЕНЬ много, не факт что
> до вставки записи не произойдет генерации идентификатора
> дважды...
> Insert into Table (ID, .....)
> Values (@GUID, .....)
>
> или я опять чего - то не понимаю. ..
>
Я ткбк полный текст привёл. Между Select @GUID=newid() и Insert не должно быть ничего.
Lex_! (2006-06-21 11:18:00) [49]Select @GUID=newid()
..... та же проблема, запросов ОЧЕНЬ много, не факт что до вставки записи не произойдет генерации идентификатора дважды...
Insert into Table (ID, .....)
Values (@GUID, .....)
или я опять чего - то не понимаю. ..
Ega23 (2006-06-21 11:02:00) [50]
> Вообще значение заполняется автоматически ID:uniqueidentifier:
> (newid())
Если так, то никак.
Ega23 (2006-06-21 11:01:00) [51]
> Доброго времени суток.
> Вопрос собственно: каким образом можно получить только что
> вставленную запись? Допустим в запросе, при вставлении записи
> генерируется id (уникальный идентификатор вида: {F3758C08-
> 7BA6-4251-8BC3-C2A4476E17D3}) - каким образом можно сразу
> же получить этот идентификатор? (с момента вставки записи
> и до момента выполнения запроса на выборку может быть вставлено
> еще несколько записей... )
Set NoCount ON
Declare @GUID uniqueidentifier
Select @GUID=newid()
Insert into Table (ID, .....)
Values (@GUID, .....)
Set NoCount OFF
Select GUID=@GUID
Lex_! (2006-06-21 10:57:00) [52]Вообще значение заполняется автоматически ID:uniqueidentifier:(newid())
т.е. я просто вставляю запись (вообще без значений) все поля заполняются сами, но ... нужно сразу же взять ID и отправить его клиенту (это всё делается в ISAPI dll)....
Возможно я чего-то не понял ... на примере если можно покажи
Sergey13 (2006-06-21 10:42:00) [53]Получить новый идентификатор передвставкой.