Member 11239384 Ответов: 1

Как передать значения первичного ключа внешнему ключу через две хранимые процедуры?


I want  to Pass identity primary key values to foreign key using two separate stored procedures.One stored procedure will contain the insert into table with primary key while the other will contain the insert into the table with the foreign key.

Below is what I have done but it is not working.

USE [Apartmentmanagementsystem]
GO
/****** Object: StoredProcedure [dbo].[SPnew1] Script Date: 6/24/2018 11:53:48 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[SPnew1]
@tenant_id int , 
@F_Name varchar(255),
@L_Name varchar(255),
@Phone varchar(255),
@Email varchar(255),
@Age int,
@Gender varchar(255),
@lease_id int output,
@initial_date varchar(255),
@end_date varchar(255),
@deposit varchar(255)

as

begin 
set nocount on
insert into dbo.Tenant
(F_Name,L_Name,Phone,Email,Age,Gender) 
values( @F_Name,@L_Name,@Phone,@Email,@Age,@Gender )
select @tenant_id=SCOPE_IDENTITY()

insert into dbo.Lease (initial_date,end_date,deposit,tenant_id)values(@initial_date,@end_date,@deposit,@tenant_id);
select @lease_id=SCOPE_IDENTITY()

end

USE [Apartmentmanagementsystem]
GO
/****** Object: StoredProcedure [dbo].[Rento] Script Date: 6/24/2018 11:54:48 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[Rento]
@rent_id int,
@rent_fee varchar (255),
@late_fee varchar (255),
@due_date varchar (255),
@service_charge varchar (255),
@pay_id int,
@pay_date varchar (255),
@pay_amount varchar (255),
@receipt_no varchar (255)


as
begin
set nocount on
declare @lease_id int 
select @lease_id=SCOPE_IDENTITY();
insert into Rent ( rent_fee,late_fee,due_date,service_charge,lease_id) values (@rent_fee,@late_fee,@due_date,@service_charge,@lease_id)
select @rent_id=SCOPE_IDENTITY();
insert into Payment (pay_date,pay_amount,receipt_no,rent_id) values(@pay_date,@pay_amount,@receipt_no,@rent_id)


end

within the stored procedures the  @tenant_id=scope identity ()  and @rent_id=scope identity () are working but @lease_id=SCOPE_IDENTITY() is not working across the two stored procedures.


Что я уже пробовал:

Я пробовал использовать @@IDENTITY вместо @lease_id только для получения нулевых значений .

Kornfeld Eliyahu Peter

Непонятный... Если у вас есть поле идентификатора, вы не должны (и в принципе не можете) вставлять значение в это поле...
Вы должны дать некоторые примеры данных, чтобы сделать это ясным...

1 Ответов

Рейтинг:
0

OriginalGriff

Используйте либо выходной параметр, либо код возврата: Возврат данных из хранимой процедуры | Microsoft Docs[^]
Первая процедура возвращает значение ID, а затем вы передаете его во вторую в качестве обычного параметра.
(И таким образом, вы можете использовать тот же второй SP для добавления других записей в таблицу позже)