Des Transactions SQL non validable tout en utilisant try..catch.. Pourquoi?

Bonjour les amis utiles,

Nous sommes en cours d'exécution dans un problème ici et je ne peux pas comprendre pourquoi il se comporte comment il se comporte. J'espère que vous pourrez m'aider.

Donné les deux (simplifié) des procédures stockées dans TSQL (SQL Server 2008R2)

create procedure [datetransaction1] 
as
begin
    begin try
        begin transaction
        declare @a datetime
        exec datetransaction2 '2013-02-02 22:21', @a output
        select @a
        exec datetransaction2 '2013-020222:22', @a output
        select @a
        exec datetransaction2 '2013-02-02 22:23', @a output
        select @a

        commit transaction
    end try
    begin catch
        print 'Catch'
    end catch
end

et

create procedure [dbo].[datetransaction2] @text nvarchar(100), @res datetime OUTPUT  
AS
BEGIN 
    BEGIN TRY
        if (LEN(@text) = 16) SET @text = replace(@text, ' ', 'T') + ':00.000'
        else if (LEN(@text) = 19) SET @text = replace(@text, ' ', 'T') + '.000'
        else SET @text = replace(@text, ' ', 'T') 
        PRINT 'trydate:' + @text
        SELECT @res =convert(datetime, @text, 126)
    END TRY
    BEGIN CATCH
        PRINT ERROR_SEVERITY()
        PRINT 'errordate:' + @text
    END CATCH
END

Si vous exécutez alors exec datetransaction1, nous voyons que tous les 3 appels à datetransaction2 sont exécutées, avec la première et la dernière (comme prévu) de fonctionner correctement, et la seconde pour entrer dans le CATCH bloc dans datetransaction2.

Donc bon.

Mais nous débarquons dans le bloc catch de datetransaction1 avec le message que la transaction est non validable:

Msg 266, Level 16, State 2, Procedure datetransaction1, Line 0
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
Msg 3998, Level 16, State 1, Line 1
Uncommittable transaction is detected at the end of the batch. The transaction is rolled back.

Ce qui n'est pas censé arriver (je pense). Nous avons pris les erreurs dans les procédures sub, alors pourquoi la transaction est soudainement devenu non validable?

Quelqu'un peut-il m'expliquer?

Noter que l'on peut probablement trouver un moyen de contourner cela, mais je suis plus intrigué par l'idée derrière tout cela. Pourquoi cette opération est soudainement devenu non validable ici?