Фактический вставленный идентификатор строки - PullRequest
3 голосов
/ 12 февраля 2012

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

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

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

Ответы [ 5 ]

5 голосов
/ 12 февраля 2012

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

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

SELECT @@ IDENTITY

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

SELECT SCOPE_IDENTITY()

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

SELECT IDENT_CURRENT ('tablename')

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

1 голос
/ 12 февраля 2012

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

1 голос
/ 12 февраля 2012

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

INSERT INTO dbo.tPerson(....) VALUES(.....)

DECLARE @NewID INT
SELECT @NewID = SCOPE_IDENTITY()

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

Примечание: длина «email» составляет всего 30 символов!?!? Обычно я делаю самый длинный столбец в моей таблице - 200 символов или даже больше: -)

0 голосов
/ 12 февраля 2012

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

0 голосов
/ 12 февраля 2012

Попробуйте

SELECT @@IDENTITY AS LastID

после вставки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...