2017-06-29 19 views
0

Ich habe 5 dynamische SQL-Einfügungen innerhalb einer TRY CATCH ausgeführt aber der CATCH Block lässt nicht die übergeordnete gespeicherte Prozedur, die diesen Code ausführt, wissen, dass es möglicherweise fehlgeschlagen ist. Ich muss nach jedem dynamischen SQL einen RAISERROR hinzufügen, um einen Fehler zu kennzeichnen.Dynamic SQL und RAISERROR

Jeder DSQL endet mit

EXEC sp_executesql @SQL, @param_definition, @param 

Muss ich die RAISERROR nach jedem Anruf oder muss ich in der CATCH nur ein benötigen?

Dank

Antwort

0

Solange die dynamischen Abfragen enthalten keine try/catch, dann THROW ing (oder RAISERROR vor SQL 2012) in der CATCH ist ausreichend. Wie

begin try 
    . . . 
    EXEC sp_executesql @SQL, @param_definition, @param 
    . . . 
    EXEC sp_executesql @SQL, @param_definition, @param 
    . . . 
    EXEC sp_executesql @SQL, @param_definition, @param 
end try 
begin catch 
    throw 
end catch