Поскольку у вас нет функций синтаксического анализа и вы используете SQL Server 2008, этот подход будет работать.Не очень эффективный, но не много вариантов.Вы можете использовать что-то на основе этого шаблона try..catch, чтобы написать собственную функцию для проверки десятичного числа.
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