Имеется MS SQL Server 2000, клиент пишется на Delphi 7. Для доступа к MS SQL используется ADO.
На сервере создаем две таблицы:
CREATE TABLE Table1 (
id int IDENTITY(1,1)PRIMARY KEY,
name varchar(20) NOT NULL)
CREATE TABLE Table2 (
id int IDENTITY(1,1) PRIMARY KEY,
name varchar(20) NULL)
и триггер на вставку записей для таблицы Test1
CREATE TRIGGER Ztrig
ON Table1
FOR INSERT AS
BEGIN
INSERT Table2 VALUES ('test')
END
Создаем форму, помещаем на нее компоненты ADOConnection1, ADODataSet1, DataSource1, DBGrid1.
ADODataSet1.CommandText := 'select id, name from Test1'
После добавления новых строк в ADODataSet1 считывается значение автоинкрементного поля (новое Identity).
Но вместо нового значения id из Table1 возвращается id из Table 2 (срабатывает триггер на вставку записи в Table2),
то есть по умолчанию выполняется команда "select @@identity", которая возвращает значение последнего
автоинкрементного поля в сессии.
Каким образом можно сделать так, чтобы возвращалось значение автоинкрементного поля из Table1 (в T-SQL это
команда "select scope_identity")?