Я написал процедуру SQL, которая вставляет данные в две таблицы.Я начал с begin transaction
, но некоторые данные нарушают ограничение второй таблицы, и в конце данные добавляются в первую таблицу, а не во вторую.Что не так с моим кодом?
create procedure [dbo].[procAddConference]
@Conf_name varchar(50),
@Begin_date date,
@End_date date,
@Price money,
@Student_disc numeric(3,2),
@Limit int,
@Disc numeric(3,2),
@Until int
as
set nocount on
begin transaction;
begin try
IF (@Begin_date > @End_date or @Limit < 0 or @Disc <0 or @Disc >1 or @Student_disc < 0 or @Student_disc > 1)
BEGIN
; throw 52000, 'Wrong data', 1
END
insert into Conferences (ConferenceName, BeginDate, EndDate, Price, StudentDiscount)
values (@Conf_name, @Begin_date, @End_date, @Price, @Student_disc)
IF @@ERROR <> 0
begin
RAISERROR('Error, transaction not completed!',16,-1)
rollback transaction;
end
declare @confID INT
set @confID = @@IDENTITY
declare @duration int
declare @iterator int
set @duration = DATEDIFF(dd, @Begin_date, @End_date)
set @iterator = 0
while @iterator <= @duration
begin
insert into ConferenceDay (ConferenceID, Date, Limit)
values (@confID, cast(DATEADD(dd, @iterator, @Begin_date) as date), @Limit)
IF @@ERROR <> 0 or @@ROWCOUNT = 0
begin
rollback transaction;
RAISERROR('Error, transaction not completed!',16,-1)
end
set @iterator = @iterator + 1
end
commit transaction;
END TRY
BEGIN CATCH
DECLARE @errorMsg nvarchar (2048) = 'Cannot add conference . Error message : ' + ERROR_MESSAGE () ;
; THROW 52000 , @errorMsg ,1
rollback transaction;
END CATCH
END