Форум: "Базы";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
ВнизПолучение значение ключевого поля, сразу после его создания Найти похожие ветки
← →
SaS (2004-02-07 14:19) [0]Уважаемые Мастера. Есть Две таблицы, в 1ой поле Id identity, то бишь автоинкремент, необходимо считать его значение, сразу после вставки записи, чтобы использовать его для вставки во вторую таблицу. Для вставки использую AdoDataSet.AppendRecord...
Единственный вариант, до которого добрался сам - это OnPost читать последнюю запись... при событии OnInsert Дельфа не дает...
А при OnPost другой пользователь уже может добавить еще одну запись. Помогите плиз.
← →
just me (2004-02-07 16:44) [1]можно по OnPost сделать select @@IDENTITY
← →
SaS (2004-02-09 16:28) [2]Спасибочки.... Разбираюсь...
Вот мысля умная: Может мне запись добавлять через SQL директом, чтобы выходом запроса было значение @@identity, т.к. событие OnPost кажется мне ненадежным.... Попробую и так и так.
← →
VLAD-MAL (2004-02-09 16:32) [3]Генерация ID ПЕРЕД его использованием:
Варианты:
- специальные процедуры (хранимые);
- GUID.
← →
Ega23 (2004-02-09 17:05) [4]
Declare @X int set NoCount ON
Insert into Table1 (....)
values (....)
Select @X=@@IDENTITY
Set NoCount OFF
Select X=@X
ЧерезQuery.Open
открываем и
FieldByName("X").AsInteger
Вот и ID нашей записи.
← →
VLAD-MAL (2004-02-09 17:09) [5]http://www.rsdn.ru/article/db/midas_migration.xml
"
Добавление записей в таблицу
Для абстрагирования метода генерации уникальных идентификаторов для каждой записи можно вынести его в хранимую процедуру, которая будет возвращать ID новой записи. Это позволяет легко добавлять записи в подчиненную таблицу, не производя никаких дополнительных манипуляций. В дальнейшем вы можете возложить на эту процедуру, например, генерацию идентификаторов в заданном диапазоне, или обеспечить сквозную нумерацию. Для хранения идентификаторов проще всего иметь отдельную таблицу примерно следующего вида:
create table Seeds (
TableName varchar(30), --имя таблицы
ID int, --ID последней вставленной записи в данную таблицу
LowOffset int --нижняя граница диапазона
)
go
При добавлении пользовательских таблиц необходимо не забывать вставлять в эту таблицу соответствующие записи. Ниже приведен пример SQL-запроса, делающего это:
insert into Seeds(TableName, ID, LowOffset, HiOffset)
values("MyCoolTable", 0, 0, 1000000)
go
Текст процедуры в простейшем случае будет выглядеть так:
create procedure CLIENT_ID
@TableName varchar(30),
@ID int output
as
update Seeds
set ID = ID + 1,
@ID = ID + LowOffset
where TableName = @TableName
go
"
← →
SaS (2004-02-09 23:18) [6]Так... вариантов много... Я сделал как и говорил, только с одной разницей: вместо @@Identity использвал Scope_Identity, т.к. мне значение после триггеров ни к чему. Для пробы на трех компьютерах запустил такое добавление одновременно, ни одного перехлеста при добавленни по 1000 записей с каждого компа...
← →
KSergey (2004-02-10 07:32) [7]> вместо @@Identity использвал Scope_Identity
Во-во, это очень правильно.
Одно из двух новшеств, собственно и нужных в MS SQL 2k
← →
ЮЮ (2004-02-10 08:03) [8]>Для пробы на трех компьютерах запустил такое добавление одновременно, ни одного перехлеста при добавленни по 1000 записей с каждого компа
А если потребуется сделать тоже самое в рамках одной транзакции ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c