This is not very good, but it works, and it gives you what you are looking for, for your specific case ... If you had a variable number of tokens in ProductDescription, you probably need to create a stored proc to control your state when parsing lines, as this will quickly become unmanageable.
create table
go
INSERT INTO
go
insert into
go
SELECT RTRIM(LTRIM(SUBSTRING(ProductDescription, 0, CHARINDEX('-', ProductDescription)-1))) as Field1,
RTRIM(LTRIM(SUBSTRING(ProductDescription, CHARINDEX('-', ProductDescription)+1, (CHARINDEX('-', ProductDescription, CHARINDEX('-', ProductDescription)+1)) - (CHARINDEX('-', ProductDescription)+1)))) as Field2,
RTRIM(LTRIM(SUBSTRING(ProductDescription, CHARINDEX('-', ProductDescription, CHARINDEX('-', ProductDescription)+1)+1, LEN(ProductDescription)))) as Field3
FROM
go
Hope this helps!