You can't use dynamic SQL in function, also can't insert, update or delete from any table in user defined function (Please check this link given by Marc), for your requirements, SP is best solution like this way :
CREATE PROCEDURE [dbo].[TEST] (@id int, @table_name nvarchar(50))
AS
BEGIN
declare @strSQL NVARCHAR(MAX)
set @strSQL = ' SELECT ' + cast(@id as varchar(20)) + ', Name from ' + @table_name
exec(@strSQL)
END
and run that SP by
EXEC [TEST] @id=5, @table_name='tablename'