Как узнать ID сразу после INSERT в SQL Server 2000?
От: Grog Россия http://kyra.spb.ru/maxim/
Дата: 20.09.02 10:33
Оценка:
Допустим есть таблица mytab;

mytab
------
MyTabID PK
MyTabInfo

Я делаю INSERT в эту таблицу. Соответственно, в MyTabID будет проставлено автоматом
какое-то значение. А вот как мне это значение сразу вставить в другую таблицу (т.е. сделать ссылку на эту запись из другой таблицы?)

Спасибо
Re: Как узнать ID сразу после INSERT в SQL Server 2000?
От: andik  
Дата: 20.09.02 10:38
Оценка:
Здравствуйте Grog.

посмотри @@IDENTITY, SCOPE_IDENTITY и IDENT_CURRENT
Re: Как узнать ID сразу после INSERT в SQL Server 2000?
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.09.02 10:38
Оценка:
Здравствуйте Grog, Вы писали:

G>Допустим есть таблица mytab;


G>mytab

G>------
G>MyTabID PK
G>MyTabInfo

G>Я делаю INSERT в эту таблицу. Соответственно, в MyTabID будет проставлено автоматом

G>какое-то значение. А вот как мне это значение сразу вставить в другую таблицу (т.е. сделать ссылку на эту запись из другой таблицы?)

G>Спасибо



SELECT @@IDENTITY
Re[2]: Как узнать ID сразу после INSERT в SQL Server 2000?
От: andik  
Дата: 20.09.02 10:48
Оценка: 27 (1)
Здравствуйте Flamer, Вы писали:

F>Здравствуйте Grog, Вы писали:


G>>Допустим есть таблица mytab;


G>>mytab

G>>------
G>>MyTabID PK
G>>MyTabInfo

G>>Я делаю INSERT в эту таблицу. Соответственно, в MyTabID будет проставлено автоматом

G>>какое-то значение. А вот как мне это значение сразу вставить в другую таблицу (т.е. сделать ссылку на эту запись из другой таблицы?)

G>>Спасибо


F>

F>
F>SELECT @@IDENTITY
F>


Маленькое дополнение:
Хотелось бы знать структуру таблицы, а именно, есть ли у нее на инсерт триггер. Если есть и в нем есть инсерты, то надо использовать

SELECT @id = SCOPE_IDENTITY()


иначе @@IFENTITY вернет последний id инсерта, который был в триггере.

Попался на это в свое время
Re[3]: Как узнать ID сразу после INSERT в SQL Server 2000?
От: Grog Россия http://kyra.spb.ru/maxim/
Дата: 20.09.02 10:53
Оценка:
Здравствуйте andik, Вы писали:

A>Здравствуйте Flamer, Вы писали:


F>>Здравствуйте Grog, Вы писали:


G>>>Допустим есть таблица mytab;


G>>>mytab

G>>>------
G>>>MyTabID PK
G>>>MyTabInfo

G>>>Я делаю INSERT в эту таблицу. Соответственно, в MyTabID будет проставлено автоматом

G>>>какое-то значение. А вот как мне это значение сразу вставить в другую таблицу (т.е. сделать ссылку на эту запись из другой таблицы?)

G>>>Спасибо


F>>

F>>
F>>SELECT @@IDENTITY
F>>


A>Маленькое дополнение:

A>Хотелось бы знать структуру таблицы, а именно, есть ли у нее на инсерт триггер. Если есть и в нем есть инсерты, то надо использовать

A>
A>SELECT @id = SCOPE_IDENTITY()
A>


A>иначе @@IFENTITY вернет последний id инсерта, который был в триггере.


Нет ничего. Просто я из VC++ делаю INSERT в простую таблицу, и мне надобно,
что бы я узнал под каким ID была записана эта запись, что бы сделать ссылку на нее в другой таблице.
Т.е. я просо выполняю следующее за INSERT'ом query — "SELECT @@IDENTITY" и как мне получить это значение? Из VC++?
Тут же нет колонок?
Как получить этот ID в какую-нить переменную?
Re[4]: Как узнать ID сразу после INSERT в SQL Server 2000?
От: andik  
Дата: 20.09.02 11:30
Оценка:
Здравствуйте Grog, Вы писали:

G>Нет ничего. Просто я из VC++ делаю INSERT в простую таблицу, и мне надобно,

G>что бы я узнал под каким ID была записана эта запись, что бы сделать ссылку на нее в другой таблице.
G>Т.е. я просо выполняю следующее за INSERT'ом query — "SELECT @@IDENTITY" и как мне получить это значение? Из VC++?
G>Тут же нет колонок?
G>Как получить этот ID в какую-нить переменную?

можно так
 SELECT @@IDENTITY AS ID


т.е. ты хочешь сделать так:


conn.Execute("INSERT");

RS = conn.Execute("SELECT @@IDENTITY AS ID")

RS.Fields("ID").Value

Но я сейчас точно не уверен правильно ли это отработает

Лучше может все это в хранимой процедуре сделать
Re[5]: Как узнать ID сразу после INSERT в SQL Server 2000?
От: AndreyT  
Дата: 20.09.02 12:57
Оценка:
Здравствуйте andik, Вы писали:

A>Лучше может все это в хранимой процедуре сделать


А что мешает сделать в пределах одного батча?


conn.Execute(" DECLARE @MyID int INSERT ... VALUES (...) SET @MyID=@@IDENTITY ...");
Re[6]: Как узнать ID сразу после INSERT в SQL Server 2000?
От: Евгений Коробко  
Дата: 20.09.02 13:02
Оценка:
Стоит, наверное, это всё ещё в транзакцию обернуть...


Здравствуйте AndreyT, Вы писали:

AT>Здравствуйте andik, Вы писали:


A>>Лучше может все это в хранимой процедуре сделать


AT>А что мешает сделать в пределах одного батча?


AT>

AT>conn.Execute(" DECLARE @MyID int INSERT ... VALUES (...) SET @MyID=@@IDENTITY ...");

AT>
Евгений Коробко
Re[7]: Как узнать ID сразу после INSERT в SQL Server 2000?
От: AndreyT  
Дата: 20.09.02 13:23
Оценка:
Здравствуйте Евгений Коробко, Вы писали:

ЕК>Стоит, наверное, это всё ещё в транзакцию обернуть...



Я привел лишь минимально необходимый фрагмент кода чтобы подчеркнуть мысль.
Использовать ли explicit транзакцию и что тут понадобится, @@IDENTITY или SCOPE_IDENTITY, я сказать не могу.
Это зависит от твоих условий.

Конечно, явную транзакцию использовать рекомендуется.
Re: Как узнать ID сразу после INSERT в SQL Server 2000?
От: Andrey_N  
Дата: 20.09.02 16:30
Оценка:
Здравствуйте Grog, Вы писали:

G>Допустим есть таблица mytab;


G>mytab

G>------
G>MyTabID PK
G>MyTabInfo

G>Я делаю INSERT в эту таблицу. Соответственно, в MyTabID будет проставлено автоматом

G>какое-то значение. А вот как мне это значение сразу вставить в другую таблицу (т.е. сделать ссылку на эту запись из другой таблицы?)

G>Спасибо


здесь
Автор: Andrey_N
Дата: 12.09.02
Re: Как узнать ID сразу после INSERT в SQL Server 2000?
От: sibman  
Дата: 26.09.02 08:29
Оценка:
Здравствуйте Grog, Вы писали:

G>Допустим есть таблица mytab;


G>mytab

G>------
G>MyTabID PK
G>MyTabInfo

G>Я делаю INSERT в эту таблицу. Соответственно, в MyTabID будет проставлено автоматом

G>какое-то значение. А вот как мне это значение сразу вставить в другую таблицу (т.е. сделать ссылку на эту запись из другой таблицы?)

G>Спасибо


Используй глобальную переменную @@IDENTITY — возвращает значение ключевого столбца последней вставленной записи(соответственно надо вставлять по одной)
Re[2]: Как узнать ID сразу после INSERT в SQL Server 2000?
От: ligett Россия  
Дата: 04.01.03 06:50
Оценка:
Здравствуйте, andik, Вы писали:

A>посмотри @@IDENTITY, SCOPE_IDENTITY и IDENT_CURRENT


Если не трудно, подскажи, какие из них относятся к SQL Server 7.0, какие к 2000, а какие к MSDE? Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.