Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/186: Рейтинг темы: голосов - 186, средняя оценка - 4.56
87 / 55 / 15
Регистрация: 01.10.2010
Сообщений: 492

Получить ID только что добавленной записи (ID - autoincrement)

01.02.2013, 08:59. Показов 34411. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Как можно получить ID только что добавленной записи (ID - autoincrement)?

Была идея

SQL
1
SELECT MAX(ID) FROM ...
но в базу одновременно добавляется много записей и не факт, что это будет ID только что твоей добавленной
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.02.2013, 08:59
Ответы с готовыми решениями:

Получить id только что добавленной записи
Здравствуйте. Добавляю запись в таблицу таким вот образом: connect.Open(); cmd.CommandType =...

Получить "id" только что добавленной записи
Доброго времени, в заполяемой запросом таблице есть поле "id", которое устанавливается автоматически. Каким способом, желательно...

Как вывести ID только что добавленной записи?
Всем привет! В программе есть 2 TextBox. В первый вводиться ФИО Во второй номер телефона private void button1_Click(object...

7
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
01.02.2013, 10:38
SCOPE_IDENTITY()
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
02.02.2013, 12:25
Цитата Сообщение от MDmitry_ Посмотреть сообщение
Доброго времени суток. Как можно получить ID только что добавленной записи (ID - autoincrement)?

Была идея

SQL
1
SELECT MAX(ID) FROM ...
но в базу одновременно добавляется много записей и не факт, что это будет ID только что твоей добавленной
SQL
1
2
3
4
INSERT INTO prd (Цена, Количество)
VALUES ('20,70','5')
       
SELECT @@IDENTITY
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
02.02.2013, 15:55
Цитата Сообщение от xxbesoxx Посмотреть сообщение
SQL
1
SELECT @@IDENTITY
@@IDENTITY хуже SCOPE_IDENTITY(), почитайте описания к ним
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
02.02.2013, 17:10
Цитата Сообщение от cygapb-007 Посмотреть сообщение
@@IDENTITY хуже SCOPE_IDENTITY(), почитайте описания к ним
Не хуже и не лучше.
Зависит от обстоятельств, триггеров у таблицы и т.п.
Могу привести пример таблицы с триггерами,
для которой IDENTITY последней вставленной записи
не помогут получить ни OUTPUT, ни SCOPE_IDENTITY(), ни @@IDENTITY, ни IDENT_CURRENT()
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
02.02.2013, 19:34
Цитата Сообщение от iap Посмотреть сообщение
Могу привести пример таблицы с триггерами,
для которой IDENTITY последней вставленной записи
не помогут получить ни OUTPUT, ни SCOPE_IDENTITY(), ни @@IDENTITY, ни IDENT_CURRENT()
Очень интересно, буду благодарен : )

Добавлено через 26 минут
слова, слова...

Добавлено через 1 час 22 минуты
Цитата из @@IDENTITY (Transact-SQL)
Примечание

Вызывающая хранимая процедура или инструкция Transact-SQL должны быть переписаны, чтобы использовать функцию SCOPE_IDENTITY(), которая возвращает последний идентификатор, использованный в области этой пользовательской инструкции, а не идентификатор, относящийся к области вложенного триггера, используемого репликацией.
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
02.02.2013, 21:30
Цитата Сообщение от cygapb-007 Посмотреть сообщение
слова, слова...(Transact-SQL)[/URL]
Ну почему слова.
Цитирую свой старый пост на другом форуме:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SET NOCOUNT ON;
USE tempdb;
IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
IF OBJECT_ID(N'TT','U') IS NOT NULL DROP TABLE TT;
CREATE TABLE T(ID INT NOT NULL IDENTITY(0,1));
CREATE TABLE TT(ID INT NOT NULL IDENTITY);
INSERT T DEFAULT VALUES;
GO
/*Для неправильного результата OUTPUT и SCOPE_IDENTITY()*/
CREATE TRIGGER InsteadOfInsertT ON T INSTEAD OF INSERT AS INSERT T DEFAULT VALUES;
GO
CREATE TRIGGER AfterInsertT ON T FOR INSERT AS
/*Для неправильного результата IDENT_CURRENT()*/
INSERT T DEFAULT VALUES;
DELETE T WHERE ID=SCOPE_IDENTITY();
/*Для неправильного результата @@IDENTITY*/
INSERT TT DEFAULT VALUES;
INSERT TT DEFAULT VALUES;
GO
 
/*Вставляем одну запись*/
DECLARE @T TABLE(ID INT NULL);
INSERT T OUTPUT inserted.ID INTO @T(ID) DEFAULT VALUES;
 
/*Пытаемся получить вставленное значение колонки IDENTITY...*/
SELECT ID[OUTPUT] FROM @T;
SELECT @@IDENTITY[@@IDENTITY];
SELECT SCOPE_IDENTITY()[SCOPE_IDENTITY()];
SELECT IDENT_CURRENT(N'T')[IDENT_CURRENT()];
/*...а на самом деле...*/
SELECT * FROM T;
 
IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
IF OBJECT_ID(N'TT','U') IS NOT NULL DROP TABLE TT;
[удалено]
1
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
03.02.2013, 00:39
Цитата Сообщение от iap Посмотреть сообщение
Ну почему слова.
Цитирую свой старый пост на другом форуме
Спасибо, буду ковыряться

Добавлено через 2 минуты
но все равно надежнее использовать SCOPE_IDENTITY, ятд : )

Добавлено через 1 час 21 минуту
Очень интересный пример, еще раз спасибо. Действительно демонстрирует, что доверять можно только SCOPE_IDENTITY

Однако отмечу, что в триггере INSTEAD OF INSERT дальнейшая обработка (если она нужна) "по-честному" будет вестись с правильным ID, "неверное" значение NULL передается только через уровень.
Так что в ХП, скорее всего, возникнет "ошибка вставки", которая вынудит проследить по схеме и найти такой наворот.

Пример можно сделать еще более интересным, если перед подключением триггеров сделать не одно, а несколько добавлений в Т - тогда сразу понятно, откуда в OUTPUT взялся 0 (inserted в instead)

Но чтобы такое придумать... снимаю шляпу..

Добавлено через 1 час 0 минут
и конечно я согласен с Vino, а ветка и вправду интересная, почитал с удовольствием
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.02.2013, 00:39
Помогаю со студенческими работами здесь

Получение ключа только что добавленной записи
Как получить в Visual Basic ключ только что добавленной записи в Access? Используется DAO.

Как узнать ID только что добавленной записи в БД
Здравствуйте! добавляю новую запись в таблицу и мне надо узнать ее id/ strSQL = "insert into сведения_больного (Дата_регистр, Фамилия)...

Как вернуть ID только что добавленной записи в API?
У меня есть такой метод в контроллере: public ActionResult<Lessons> AddLessons( Lessons lessons) { ...

Как узнать id только что добавленной записи mysqli?
Всем привет! Записываю данные в БД. Надо узнать id этой записи, т.е. id только что вставленной записи. В БД у id стоит auto_increment. ...

Не получается определить код только что добавленной записи
Уже несколько часов читаю в нете как это сделать и никак не получается, вот код, который я написал: string sqlquery =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru