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

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

01.02.2013, 08:59. Показов 34382. Ответов 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): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru