Witam,
Poproszę o pomoc, aby zrozumieć dlaczego tak się dzieje, co robię źle.
Procedury poniżej mają pomóc zobrazować problem.
Chciałbym po zakończeniu procedury uzyskać jej wynik:
0 - poszła
1 - błąd
Wiem, że standardowo procedura nie zwraca wartości :-)
I szukam rozwiązania.
Na początku próbowałem to osiągnąć stosując: @product_count INT OUTPUT zgodnie z przykładem poniżej.
Ale gdy procedura "nie przeszła - ROLLBACK" to nie zwracała wartości.
Wartość zawsze była zwracana gdy procedura była wykonana bez błędów.
Przy stosowaniu @product_count INT OUTPUT - działało pod warunkiem gdy nie było włączone: TRY / CATCH
Bazowałem na tym przykładzie:
CREATE OR ALTER PROCEDURE [dbo].[GetCustomerEmail]
(@FirstName AS varchar(100),
@CountRecords int OUTPUT
)
AS
BEGIN
SELECT FirstName, MiddleName, Lastname, EmailAddress
FROM [SalesLT].[Customer]
WHERE FirstName = @FirstName
SELECT @CountRecords = @@ROWCOUNT;
END
GO
Wymyśliłem wiec takie rozwiązanie... działa przy TRY / CATCH.
CREATE PROCEDURE dbo.TEST
AS
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO table1 (Nazwa)
VALUES ('121111'); -- Pole tabeli INT
If @@ROWCOUNT <> 0
begin
Select 0 as StatusWyjscia
end;
COMMIT TRANSACTION
END TRY
BEGIN CATCH
If @@ROWCOUNT = 0
begin
Select 1 as StatusWyjscia
end;
END CATCH
Baza SQL Server Express 2019