Off the top of my head, I'm thinking NULL should have worked if the accepting table column allows NULL, and in any event if it didn't, that's a whole nother error message. It seems more likely to me that you have spaces in your source.
Either way, the following ought to take care of it:
If the receiving column allows NULL:
INSERT INTO tableB (FieldNameB)
SELECT CASE ISNULL (FieldNameA, '')
WHEN ''
THEN NULL
ELSE CAST (FieldNameA AS DECIMAL (3,0))
END
FROM tableA
If the receiving column does not allow NULL:
INSERT INTO tableB (FieldNameB)
SELECT CAST (FieldNameA AS DECIMAL (3,0))
FROM tableA
WHERE FieldNameA IS NOT NULL
AND FieldNameA != ''
AND FieldNameA LIKE REPLICATE ('[0-9]', LEN (FieldNameA))
T-SQL has an ISNUMERIC function, but for my tastes it is far too tolerant of non-numerics. T-SQL needs an ISREALLYTRULYNUMERICHONESTTOGOD function.