Вернуть идентификатор только что добавленной строки - PullRequest
2 голосов
/ 06 мая 2009

В том же духе, что и мой предыдущий вопрос Я снова прошу SO ребят за вашу коллективную мудрость и помощь.

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

В таблице есть два важных столбца: LocationID и CaseID. CaseID является автоинкрементным, поэтому при добавлении вставки нового местоположения он будет автоматически увеличен.

У меня сейчас есть это:

-- previous checks for existance of CaseID

IF @CaseID IS NULL
BEGIN
    INSERT INTO
        Cases(LocationID)
    VALUES
        (@LocationID)

    -- what now?
END

Я думал о немедленном выполнении заявления @CaseID = (SELECT blah), но мне было интересно, есть ли лучший способ?

Есть ли лучший способ? Как бы вы это сделали?

Ответы [ 5 ]

4 голосов
/ 06 мая 2009
SELECT @CaseID = SCOPE_IDENTITY()

На самом деле, вы можете просто сделать (если это конец сохраненного процесса.):

SELECT SCOPE_IDENTITY()

(Предложение OUTPUT доступно только в SQL Server 2005 и далее ...)

Ссылка: SCOPE_IDENTITY

1 голос
/ 06 мая 2009

Как уже упоминалось, SCOPE_IDENTITY () - путь, хотя некоторые инструменты ORM также предоставляют эту функциональность.

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

1 голос
/ 06 мая 2009

SELECT SCOPE_IDENTITY ()

1 голос
/ 06 мая 2009

scope_identity ()

0 голосов
/ 06 мая 2009

Вам необходимо использовать предложение OUTPUT

http://blog.jemm.net/articles/databases/how-to-using-sql-server-2005s-output-to-return-generated-identity/

... который, как указано, доступен только в sqlserver 2005. Plz игнорировать.

...