Ссылка на сгенерированный первичный ключ в сценарии SQL

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

Например, если я создал клиента, а затем попытался создать заказ для этого клиента, как мне получить первичный ключ, сгенерированный для этого клиента?

Я использую SQLServer.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
556
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вот так:

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();

Я считаю, что scope_identity () предпочтительнее @@ IDENTITY в большинстве ситуаций.

Joel Coehoorn 16.01.2009 04:03

+1 для примечания Джоэла, scope_identity будет изящно обрабатывать триггеры (например, если у вас есть триггер вставки, ваша личность @@ может стать поддельной)

Sam Saffron 16.01.2009 04:08

Это помогло, спасибо, я использую SQLServer 2005, который, похоже, поддерживает scope_identity ().

Kenny 16.01.2009 04:24

Кенни, scope_identity () поддерживается SQLServer 2005 и даже 2000. Это безопаснее использовать, чем @@ identity.

kristof 16.01.2009 15:26

Если это возможно в вашей версии, используйте вместо этого SCOPE_IDENTITY (). Безопаснее, чем @@ IDENTITY.

Если вы вставляете несколько строк одновременно, вы можете получить все идентификаторы (например, для создания связанных записей) с помощью OUTPUT INTOфункция SQL Server 2005 или новее.

Это поможет избежать написания циклов, курсоров и т. д.

Другие вопросы по теме