SQL Server 2005: безопасно ли использовать @@ identity? - PullRequest
3 голосов
/ 19 мая 2009

У меня есть процедура, в которой я вставляю запись в таблицу employee. Придя в силу, используя @@ identity? когда эта процедура будет вызываться более чем одним пользователем одновременно, может существовать вероятность того, что она вернет личность другого сотрудника, вставленного в одно и то же время. потому что система не блокирует личность?

- код - идентичность для столбца empid
вставьте в имя сотрудника (имя) («сахил»); возврат @@ тождество

см. sql server 2005: безопасно ли использовать @@ identity? за блокировку при выдаче удостоверения

Ответы [ 2 ]

8 голосов
/ 19 мая 2009

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

Подробнее здесь .

3 голосов
/ 19 мая 2009

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

...