En realidad no hace falt explicar mucho. Con sólo comparar ambos códigos se percibe la diferencia:
Mal:
Código SQL:
Ver originalSET @SQLSTRING=N'UPDATE Servicio SET TRASPASO=TRASPASO+1 FROM Servicio
INNER JOIN @TAB tab ON tab.ID = Servicio.ID'
Bien:
Código SQL:
Ver originalSET @SQLSTRING=N'UPDATE Servicio SET TRASPASO=TRASPASO+1 FROM Servicio
INNER JOIN ' + @TAB + ' as tab ON tab.ID = Servicio.ID'
Da la impresión de que @maialenlopez está confundiendo el SQL con PHP, donde la sola presencia de una variable dentro de una cadena de texto hace que se reemplace la variable por su contenido...
Acá no funciona del mismo modo, y el contexto de existencia del SQL en la cadena es diferente al contexto de existencia de la variable en el SP.