• Your error handling is screwed.

    The moment you run any code after the line the has an error @@error is reset, you can test this fact with the following:

    select 1/0 as bob
    if @@error<>0 
    begin
     print @@error
    end

     

    Your error checking should be as follows:

    SET @Error = @@Error
    IF @Error <> 0
    BEGIN
     GOTO spERROR
    END