Since you don't have the parsing features and you are using SQL Server 2008, this is an approach that would work. Not terribly efficient, but not many options. You could use something based on this try..catch pattern to write your own function to validate a decimal.
DECLARE @Values TABLE(
ID INT IDENTITY(1,1)
, [Value] VARCHAR(20)
)
INSERT INTO @Values SELECT '22.1'
INSERT INTO @Values SELECT '22.1 sdfsfds'
DECLARE @GoodValues TABLE(ID INT)
DECLARE @BadValues TABLE(ID INT)
DECLARE @ID INT
DECLARE @Value VARCHAR(20)
DECLARE @ValueAsDecimal DECIMAL
DECLARE tryparse_cursor CURSOR FOR
SELECT ID, [Value]
FROM @Values
OPEN tryparse_cursor
FETCH NEXT FROM tryparse_cursor
INTO @ID, @Value
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
SET @ValueAsDecimal=CAST(@Value AS DECIMAL);
INSERT INTO @GoodValues SELECT @ID;
END TRY
BEGIN CATCH
INSERT INTO @BadValues SELECT @ID;
END CATCH
FETCH NEXT FROM tryparse_cursor
INTO @ID, @Value
END
CLOSE tryparse_cursor;
DEALLOCATE tryparse_cursor;
select * from @GoodValues
select * from @BadValues