PDA

View Full Version : كار با Transaction



usef64
سه شنبه 15 فروردین 1391, 12:31 عصر
با سلام.
من اين پروسيجر رو نوشتم.ميخوام اگه يه insert انجام نشد، اون يكي هم انجام نشه.
ولي درست كار نميكنه.
كسي ميدونه چرا؟
اينه:

create proc trans11(@fn char(40),@lnchar(40),@mailchar(40),@pss int,@pType char(40),@city char(40),@leg char(40),@org char(40),@mstr char(40),@proj char(40),@cont char(40),@e_cod int,@pln_cod int)
as
begin transaction

insert into Inf1
values(@fn,@ln,@mail,@e_cod,@pss)

insert into Inf2(Plan_type,City,Legate,Organ,Master,Project,Co ntractor,Eng_code,Postal_code,Plan_code)
values(@pType,@city,@leg,@org,@mstr,@proj,@cont,@e _cod,@pln_cod )

if(@@Error<>0)
commit transaction

else
rollback

nedata
سه شنبه 15 فروردین 1391, 13:15 عصر
create proc trans11(@fn char(40),@lnchar(40),@mailchar(40),@pss int,@pType char(40),@city char(40),@leg char(40),@org char(40),@mstr char(40),@proj char(40),@cont char(40),@e_cod int,@pln_cod int)
as
begin transaction

insert into Inf1
values(@fn,@ln,@mail,@e_cod,@pss)

insert into Inf2(Plan_type,City,Legate,Organ,Master,Project,Co ntractor,Eng_code,Postal_code,Plan_code)
values(@pType,@city,@leg,@org,@mstr,@proj,@cont,@e _cod,@pln_cod )

if(@@Error<>0)
rollback
else
commit transaction

usef64
پنج شنبه 24 فروردین 1391, 12:45 عصر
من این دستور رو نوشتم، ولی حالا که دارم توی برنامم ازش استفاده میکنم، با وجود تکراری بودن و عدم انجام insert اولی، insert دومم انجام میشه.
به نظرتون مشکل از کجاست؟

lastmory
پنج شنبه 24 فروردین 1391, 23:29 عصر
سلام
اینو تست کن

create proc trans11(@fn char(40),@lnchar(40),@mailchar(40),@pss int,@pType char(40),@city char(40),@leg char(40),@org char(40),@mstr char(40),@proj char(40),@cont char(40),@e_cod int,@pln_cod int)
as
BEGIN TRAN
BEGIN TRY

insert into Inf1
values(@fn,@ln,@mail,@e_cod,@pss)

insert into Inf2(Plan_type,City,Legate,Organ,Master,Project,Co ntractor,Eng_code,Postal_code,Plan_code)
values(@pType,@city,@leg,@org,@mstr,@proj,@cont,@e _cod,@pln_cod )
COMMIT TRAN
END TRY
BEGIN CATCH
RollBack TRAN
RETURN ERROR_MESSAGE() + ';' + CAST(error_number() as nvarchar(max)) + ';' + ERROR_PROCEDURE()
END CATCH