Wenn ich diese gespeicherte Prozedur ausgeführt habe, kann ich nicht in IF
Block Rollback selbst die IF
Aussage war richtig. Wenn die Anweisung IF
richtig war, wird das Skript am Ende noch ausgeführt, und es gibt überhaupt kein Rollback.Kann nicht zurücksetzen, wenn block transaction sql
Die Botschaft: Der Account-ID wurde bereits erfolgreich Register
Msg 3902, Ebene 16, Status 1, Prozedur PROC_DANGKY, Zeile 23
Die COMMIT TRANSACTION-Anforderung hat entsprechende kein BEGIN TRANSACTION verwendet.
Code:
CREATE PROCEDURE PROC_REGISTER
@name nvarchar(30),
@birth datetime,
@passport nvarchar(9),
@address nvarchar(50),
@phone nvarchar(11),
@email nvarchar(20),
@account nvarchar(30),
@password nvarchar(20)
AS
BEGIN TRAN
BEGIN TRY
IF (EXISTS(SELECT * FROM CUSTOMER WHERE ACCOUNT = @account))
BEGIN
PRINT N'The account id has already been used'
ROLLBACK TRAN
END
INSERT INTO KHACHHANG
VALUES (@name, @birth, @passport, @address, @phone, @email, @account, @password)
PRINT N'Successfully registered'
END TRY
BEGIN CATCH
DECLARE @ErrorMsg VARCHAR(2000)
SELECT @ErrorMsg = N'Error: ' + ERROR_MESSAGE()
RAISERROR(@ErrorMsg, 16,1)
ROLLBACK TRAN
RETURN
END CATCH
COMMIT TRAN
Sie nichts zu tun, wenn Sie für VORHANDEN überprüfen, so müssen Sie nicht zurück rollen und nach Einsatz Sie begehen und nicht von außen – maSTAShuFu