Łukasz W. SQL/ETL/BI
Temat: zagadka
Witammam taką procedurę slq która pobiera dane z pliku .csv potem na podstawie nr który jest tam zawarty wyszukuje nr polisy i potem kursorem wywołuję następną procedurę która zamyka daną polisę, ale czasem osoba przesyłająca plik .csv poda zły numer polisy, i chciałbym zeby cursor sie (mam tu ustawione begin try end try, a jak wywali błąd to begin catch end catch) nie wywalał tylko żeby ten zły numer polisy wrzucił do tabeli tymczasowej a kursor niech sobie idzie dalej , oczywiscie wszystko jest w transakcji i jak jeden nr jest zły to cała transakcja jest cofana
BEGIN TRANSACTION AAAA
BEGIN TRY
DECLARE PolisaCursor CURSOR FOR
SELECT Ltrim(Rtrim(Nr_polisy))
,Data_zawarcia
,Data_rozwiazania
,IdTerminationReason
FROM polisy_rozwiazania
WHERE Nr_polisy IS NOT NULL
OPEN Cursor
FETCH NEXT FROM Cursor INTO
@PolicyNoFull,
@DateStart,
@DateClose,
@IdTerminationReason
WHILE @@FETCH_STATUS = 0
BEGIN
print @PolicyNoFull
SET @IdPolicy = (SELECT IdPolicy
FROM Policy
WHERE PolicyNoFull = @PolicyNoFull
)
UPDATE Policy
SET DateClose = @DateClose,
IdTerminationReason = @IdTerminationReason,
Active = 1
WHERE IdPolicy = @IdPolicy
print @IdPolicy
EXEC @ReturnValue = sp_ClosePolicy @IdPolicy
print @ReturnValue
FETCH NEXT FROM PolisaCursor INTO
@PolicyNoFull,
@DateStart,
@DateClose,
@IdTerminationReason
END --WHILE
CLOSE Cursor
DEALLOCATE Cursor
END TRY
BEGIN CATCH
print 'zły koniec'
ROLLBACK TRANSACTION AAAA
SET @err=1;
DECLARE @ErrMsg nvarchar(4000)=ERROR_MESSAGE()+char(13)+char(10)+'Nr polisy: '+CAST(@PolicyNoFull AS varchar);;
RAISERROR(@ErrMsg,11,1) WITH SETERROR;
END CATCH
IF(@err<>1)
BEGIN
print 'dobry koniec'
COMMIT TRANSACTION AAAA;
END