Как я могу надежно получить идентификатор личности строки, вставленной в другую базу данных - PullRequest
0 голосов
/ 24 сентября 2019

Является ли scope_identity() надежным способом получения идентификатора строки, недавно вставленной в другую базу данных на одном и том же сервере SQL?

У меня есть две базы данных DB_A и DB_B, расположенные на одном и том же сервере SQL (2012) У меня есть сохраненный процесс, расположенный в DB_A, в котором строка вставлена ​​в DB_B.Идентификационный идентификатор этой строки должен быть получен для продолжения сохраненного процесса.

   insert into DB_B.dbo.CustAddress values (@newAddress);

   select @newID = scope_identity()

Я проверил этот подход на своем тестовом сервере, и он отлично работает.Однако, кажется, что иногда (редко и трудно поймать) ID не получается.Идентификатор просто равен 0 (не как возвращение неправильного идентификатора) на рабочем сервере, который является загруженной средой с большим количеством вставок в DB_B из различных источников.Поскольку идентификатора нет, я не могу проверить, успешно ли выполнена вставка, хотя исключений SQL нет.

Мой вопрос заключается в том, могу ли я доверять возвращенному идентификатору и при каких обстоятельствах SQL не сможет вернуть идентификатор идентификаторавновь вставленной строки таким образом?

1 Ответ

4 голосов
/ 24 сентября 2019

Используйте предложение output:

declare table @ids (id int);
insert into DB_B.dbo.CustAddress
    output inserted.id into @ids
    values (@newAddress);

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