従業員、連絡先、ログインの 3 つのテーブルがあります。従業員テーブルには、ID 値を持つ主キーとして emp_id があります。Contact テーブルには、Employee テーブルの emp_id を参照する外部キーとして emp_id があり、Login テーブルにも、Employee テーブルの emp_id を参照する外部キーとして emp_id があります。すべてのテーブルには、すべてが identity(1,1) として設定されているため、自動的に増加する主キーがあります。
これが私のSQLクエリです:
create procedure [dbo].[sp_registerEmp]
@start_date datetime,
@first_name varchar(50),
@middle_name varchar(50),
@last_name varchar(50),
@father_name varchar(50),
@grandfather_name varchar(50),
@country varchar(20),
@mobile_no int,
@email_id varchar(30),
@designation varchar(30),
@username varchar(20),
@password varchar(15),
@security_question varchar(150),
@security_answer varchar(50)
as
begin
begin try
begin transaction
insert into [dbo].[Employee]([start_date])
values(@start_date)
insert into [dbo].[Contact](first_name,middle_name,last_name,father_name,grandfather_name,
country,mobile_no,email_id,emp_id)
values(@first_name,@middle_name,@last_name,@father_name,@grandfather_name,
@country,@mobile_no,@email_id,SCOPE_IDENTITY());
insert into [dbo].[Login](username,userpassword,security_question,security_answer,emp_id)
values(@username,@password,@security_question,@security_answer,IDENT_CURRENT('Employee'));
commit transaction
end try
begin catch
rollback transaction
end catch
end
ここで私の質問は、ident_current('tablename') がセッションとスコープに関係なく、そのテーブルで生成された最後の ID 値を返すことです。あるユーザー向けであるが、別のユーザー向けに作成されたテーブル。トランザクションの最初のクエリによって挿入されるログイン テーブルの emp_id を取得したいだけです。これを達成するにはどうすればよいですか?
もう1つの問題は、Visual Studioからストアドプロシージャを実行すると、エラーがあるにもかかわらず、失敗と成功に関係なく、挿入試行のたびに主キーが増加する. エラーが発生したときに、主キーが増加しないようなことをしたい.私はこれを行う必要がありますか?