Disculpa, edité el mensaje para poner el codigo completo. Lo que añadi fue:
IF (@@error <> 0)
BEGIN
ROLLBACK TRAN
RETURN
END
luego del insert en la tabla cabecera.
Ejecutando el procedimiento en el analizador de consultas me dice 1 row affected (el insert de la cabecera) y luego me salía un error en el insert de la primera row del detalle (como es detalle hay muchos registros, por ello el while), y luego me salia el error que os comento.
El error en el insert del detalle ya lo identifiqué y lo corregí, y volví a ejecutar el procedimiento y no hay errores, y le hice un select a las tablas para verificar los insert y me he di cuenta que el insert en latabla de la cabecera (de la ejecución anterior, la que tenía el error) si se hizo a pesar de que se tuvo que haber hecho roll back; entonces modifiqué el procedimiento para dejarlo como antes (con el error) lo volví a ejecutar y nuevamente se inserta en la cabecera, me sale el error en el insert del detalle y me sale el error raro que comento y al hacer el select a la tabla cabecera el registro insertado si está
Contestando tus preguntas:
Hago un solo BEGIN TRAN
No es un sp anidado, lo ejecuto una sola vezz
El error se me presenta en el insert del detalle.