utilizzare una procedura con un blocco TRY CATCH per eliminare gli errori
cioè
CREATE PROCEDURE p_try_cast
@type nvarchar(MAX),
@value nvarchar(MAX)
AS
BEGIN
BEGIN TRY
DECLARE @sql varchar(MAX)
DECLARE @out_table TABLE(value varchar(MAX))
SET @sql = 'SELECT CONVERT(varchar(max), CAST(''' + @value + ''' AS ' + @type + '))'
INSERT @out_table
EXECUTE (@sql)
IF EXISTS (SELECT 1 FROM @out_table WHERE value = @value)
RETURN 1
RETURN 0
END TRY
BEGIN CATCH
RETURN 0
END CATCH
END
GO
Ora è possibile chiamare che con la stringa passata e il tipo desiderato e il proc restituisce 1 per il successo e 0 per il fallimento
DECLARE @ret int
-- This returns 0 - Fail
EXEC @ret = p_try_cast 'integer', '1.5'
-- This returns 1 - Success
EXEC @ret = p_try_cast 'integer', '1.5'
-- This returns 0 - Fail
EXEC @ret = p_try_cast 'char(4)', 'HELLO'
-- This returns 1 - Success
EXEC @ret = p_try_cast 'char(4)', 'HELL'
fonte
2017-11-20 17:15:06
-1: selezionare isnumeric ('1.'); seleziona cast ('1.'come int); – Pete
ISNumeric ('a1a') restituisce 1, tuttavia non è possibile eseguire il cast ('a1a' come float) – CodingTT
Credo che intendessi SQL Server 2014: https://msdn.microsoft.com/en-us/library/hh974669.aspx –