Как получить автоматически сгенерированный первичный ключ после вставки в хранимую процедуру? - PullRequest
1 голос
/ 20 марта 2019

Моя таблица SQL Server:

[dbo].[Rep] (
[rep_ID]        INT          IDENTITY (300, 1) NOT NULL,
[Restaurant_ID] INT          NULL,
[Fname]         VARCHAR (50) NOT NULL,
[Lname]         VARCHAR (50) NOT NULL,
CONSTRAINT [PK_Rep_ID] PRIMARY KEY CLUSTERED ([rep_ID] ASC),
CONSTRAINT [FK_Restaurant_ID] FOREIGN KEY ([Restaurant_ID]) REFERENCES [dbo].[Restaurants] ([ID])

);

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

Моя текущая хранимая процедура:

CREATE PROCEDURE [dbo].[createRepAcc]
    @first varchar(50),
    @last varchar(50)
AS
    INSERT INTO Rep([Fname], [Lname])
    OUTPUT inserted.rep_ID
    VALUES (@first, @last);

Он может быть вставлен в таблицу, но возвращает только 1 вместо сгенерированного первичного ключа.

Что я делаю не так?

1 Ответ

2 голосов
/ 21 марта 2019

Вы можете использовать scope_identity () , чтобы получить последний сгенерированный идентификатор.Для вашего случая вот подробная рабочая таблица

/* creating a simple table with identity column */
CREATE TABLE dbo.a(identity_column INT IDENTITY(300,1), x CHAR(1));

/* Procedure that inserts values and returns generated output*/
CREATE PROCEDURE [dbo].[ap]
    @x char(1),
    @id int output
AS
    INSERT INTO a(x) VALUES (@x);
    select @id = SCOPE_IDENTITY();

/* This is how the procedure could be called */
declare @ident int -- declare a variable to receive output
execute dbo.ap @x='b', @id=@ident output -- execute or call the procedure
select @ident -- select or print the genereated id

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