This is for older SQL versions, for everything else use isnumeric().
CREATE FUNCTION dbo.IsNumber
(@Value NVARCHAR(4000))
RETURNS BIT
AS
BEGIN
-- Check if the input is an integer, decimal, or money format
RETURN CASE
WHEN @Value IS NULL THEN 0
WHEN @Value LIKE '%[^0-9.-]%' THEN 0 -- Contains non-numeric characters
WHEN @Value LIKE '%.%.%' THEN 0 -- More than one decimal point
WHEN @Value = '.' THEN 0 -- Just a decimal point
WHEN @Value LIKE '-%' AND CHARINDEX('-', @Value) > 1 THEN 0 -- '-' not at the start
WHEN @Value LIKE '%-%' THEN 0 -- Contains '-' not at the start
WHEN LEN(@Value) = 0 THEN 0 -- Empty string
ELSE 1
END
END
GO