Я пытаюсь создать группу записей в базе данных с помощью одного сценария, и проблема, с которой я сталкиваюсь, заключается в том, как ссылаться на сгенерированный первичный ключ из предыдущей записи, которую я создал.
Например, если я создал клиента, а затем попытался создать заказ для этого клиента, как мне получить первичный ключ, сгенерированный для этого клиента?
Я использую SQLServer.


Вот так:
DECLARE @customerid int;
INSERT INTO customers(name) VALUES('Spencer');
SET @customerid = @@IDENTITY;
Обновлено:
Очевидно, это должна быть SCOPE_IDENTITY (), чтобы работать с триггерами должным образом.
DECLARE @customerid int;
INSERT INTO customers(name) VALUES('Spencer');
SET @customerid = SCOPE_IDENTITY();
+1 для примечания Джоэла, scope_identity будет изящно обрабатывать триггеры (например, если у вас есть триггер вставки, ваша личность @@ может стать поддельной)
Это помогло, спасибо, я использую SQLServer 2005, который, похоже, поддерживает scope_identity ().
Кенни, scope_identity () поддерживается SQLServer 2005 и даже 2000. Это безопаснее использовать, чем @@ identity.
Если это возможно в вашей версии, используйте вместо этого SCOPE_IDENTITY (). Безопаснее, чем @@ IDENTITY.
Если вы вставляете несколько строк одновременно, вы можете получить все идентификаторы (например, для создания связанных записей) с помощью OUTPUT INTOфункция SQL Server 2005 или новее.
Это поможет избежать написания циклов, курсоров и т. д.
Я считаю, что scope_identity () предпочтительнее @@ IDENTITY в большинстве ситуаций.