Фактический вставленный идентификатор строки

Я создал таблицу в моем db в этом выражении

CREATE TABLE tPerson ( id INT NOT NULL PRIMARY KEY identity(1,1) , name NVARCHAR(100) not null , email NVARCHAR(30) not null ) GO 

Теперь я вставляю новое значение с помощью INSERT. Мой вопрос: как я могу получить идентификатор текущей добавленной строки? Есть идеи ??

Предполагая, что SQL-сервер, вы должны проверить эту статью, чтобы получить хорошее понимание получения идентификаторов.

Вот фрагмент:

SELECT @@ IDENTITY

Он возвращает последнее значение IDENTITY, созданное в соединении, независимо от таблицы, которая произвела значение, и независимо от области действия оператора, который произвел значение. @@ IDENTITY вернет последнее значение идентификатора, введенное в таблицу текущего сеанса. Хотя @@ IDENTITY ограничен текущим сеансом, он не ограничивается текущей областью. Если у вас есть триггер в таблице, который создает личность в другой таблице, вы получите идентификатор, который был создан последним, даже если это был триггер, который его создал.

SELECT SCOPE_IDENTITY ()

Он возвращает последнее значение IDENTITY, созданное в соединении, и оператором в той же области действия, независимо от таблицы, которая произвела значение. SCOPE_IDENTITY (), например @@ IDENTITY, вернет последнее значение идентификации, созданное в текущем сеансе, но оно также ограничит его и вашей текущей областью. Другими словами, он вернет последнее значение идентификатора, которое вы явно создали, а не любое удостоверение, созданное триггером или пользовательской функцией.

SELECT IDENT_CURRENT ('tablename')

Он возвращает последнее значение IDENTITY, созданное в таблице, независимо от соединения, которое создало значение, и независимо от области действия оператора, который произвел значение. IDENT_CURRENT не ограничивается областью и сеансом; он ограничен указанной таблицей. IDENT_CURRENT возвращает значение идентификатора, сгенерированное для конкретной таблицы, в любом сеансе и в любой области.

Это похоже на SQL Server, и в этом случае просто используйте:

 INSERT INTO dbo.tPerson(....) VALUES(.....) DECLARE @NewID INT SELECT @NewID = SCOPE_IDENTITY() 

SCOPE_IDENTITY возвращает последнее введенное значение IDENTITY в этой текущей области.

Сторона примечания: «электронная почта» составляет всего 30 символов!?!? Я обычно делаю, что самый длинный столбец в моей таблице – 200 символов или даже больше 🙂

Используйте @@IDENTITY или SCOPE_IDENTITY для MS SQL Server 🙂

Пытаться

 SELECT @@IDENTITY AS LastID 

после вашего INSERT

Вы также можете сделать это через JDBC напрямую, чтобы избежать необходимости выбирать, так как обычно оператор insert возвращает число вставленных строк, которое вы можете проверить. Spring поддерживает это через JdbcTemplate, см. Здесь

  • Sql Server 2005 - вставить, если не существует
  • SQL Server: строки не соответствуют порядку
  • SQL быстрые INSERT без UPDATE
  • Msg 207, Уровень 16, Недопустимое имя столбца 'MH380'
  • не может вставлять данные в базу данных
  • Можно ли внедрить ручное приращение с помощью простого SQL INSERT?
  • ASP.Net вставляет данные из текстового поля в базу данных
  • SQL Server генерирует уникальное значение
  • Как INSERT INTO в таблице 300 раз в цикле в SQL?
  • Вставка символа в начале строки в SQL
  • Синтаксис SQL Server INSERT
  • Interesting Posts

    В какой учетной записи пользователя работает SQLCMD в T-SQL Script без опции -U и -P?

    Можете ли вы настроить аудит SQL Server 2008 для хранения данных аудита в базе данных, отличной от проверяемой?

    Самый простой способ сделать повторный загрузку текстового файла на сервер sql

    SQL-Server: создание представления с подстрокой в ​​столбце, подстрока возвращает null, когда есть данные

    Уникальный vs NonUnique Clustered Index для ускорения поиска в поле NonUnique

    Как изменить переменную в SSIS?

    Имеет ли SQL Server эквивалент MySql Workbench?

    Идентификатор ASP.NET от 2 до 3

    Средство сравнения схем в Visual Studio перестало нормально работать, давая «не может быть перезаписано. Он используется ошибками базы данных «DbName»

    Добавить новый столбец в таблице sql

    Строка подключения «Ошибка входа для пользователя»

    SQL-запрос только потянул данные из одной таблицы

    Как я могу получить ближайшее время от базы данных?

    SQL Server 2012, geography.STContains, неправильный результат?

    Как сохранить вывод html запроса в текстовый файл, используя переменную?

    Давайте будем гением компьютера.