Можно ли использовать блоки TRY CATCH в SQL-выборках?
Для материала, подобного этому, например:
select order, CONVERT(DATETIME, orderDate) from orders
Как лучше всего справиться с этим сценарием?
Я не знаю о try-catch, но в SQL Server у вас есть функция ISDATE, и вы можете сделать что-то вроде
CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END
В MS SQL Server 2012 есть новая конструкция, которая делает именно то, что требуется:
SELECT CASE WHEN TRY_CONVERT(float, 'test') IS NULL THEN 'Cast failed' ELSE 'Cast succeeded' END AS Result; GO
См. Также http://msdn.microsoft.com/en-us/library/hh230993.aspx
В самом предложении SELECT нет.
Можно проверить дату, используя ISDATE ()
select order, CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END from orders
Я не думаю, что попытка перехвата возможна внутри выбора, но снаружи возможна при работе с хранимыми процедурами.
begin try select cast(strartnr as int) from table end try begin catch select 10000 from table end catch
Вы можете использовать функцию ISDATE ():
SELECT ISDATE('11/13/2009') SELECT ISDATE('13/11/2009')