Может альтернативно использовать T-SQL try-catch. Однако я не уверен, какое негативное влияние это окажет на сервер:
SQL:
DECLARE @intVar VARCHAR(MAX), @stringVar VARCHAR(MAX), @default_value INT, @tempVar INT
SET @default_value = NULL
SET @stringVar = 'Hello World!!'
SET @intVar = '550'
PRINT 'Casting @stringVar: '
BEGIN TRY
SET @tempVar = CAST(@stringVar AS INT)
END TRY
BEGIN CATCH
SET @tempVar = @default_value
END CATCH
PRINT @tempVar + 20
PRINT ''
PRINT 'Casting @intVar: '
BEGIN TRY
SET @tempVar = CAST(@intVar AS INT)
END TRY
BEGIN CATCH
SET @tempVar = @default_value
END CATCH
PRINT @tempVar
Выход:
Кастинг @stringVar:
Casting @intVar:
550
Кроме того, я бы создал пользовательские функции для тех операторов try catch, которые принимают varchar inputString и int default_value, которые возвращают целое число.