Stored procedure to describe the reason that a particular employee is unsuitable for a particular task
A handful of critiques:


As mentioned in the comments, this is undefined behavior: SELECT @val = @val + ColumnName FROM AnyTable. As such, you should avoid it. If you need to, use STUFF or STRING_AGG instead
When creating a temp table, (n)varchar columns should specify their collation (e.g. COLLATE DATABASE_DEFAULT ) to avoid errors in case server collation and database collation differ.
Using RETURN or a chain of IF ELSE IF etc is going to raise fewer eyebrows than GOTO
Don't just blindly insert into a table; always specify a column list.
Its cheaper to use table variables than temp tables; SQL Server doesn't need to do as much work for statistics and fewer latches of creation are required.
You generally don't need to drop the temp table (assuming this is called from a stored procedure) as that'll get done automatically by SQL Server
You could probably just return the list of disciplines + an error code, and let the consuming application handle presenting it in a friendly way. This also makes I18N someday in the future much easier.