18

是否可以在 SQL Selects 中使用 TRY CATCH 块?

对于与此类似的东西,例如:

select 
   order, 
   CONVERT(DATETIME, orderDate)
from orders

处理这种情况的最佳方法是什么?

4

5 回答 5

22

我不知道 try-catch,但是在 SQL Server 中你有 ISDATE 函数并且可以在那里做类似的事情

CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END
于 2009-05-28T13:18:45.153 回答
14

在 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

于 2012-08-16T13:50:33.260 回答
3

在 SELECT 子句本身中,没有。

您可以使用ISDATE ()测试日期

select 
   order, 
   CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END
from orders
于 2009-05-28T13:19:51.563 回答
1

您可以使用函数 ISDATE():

SELECT ISDATE('11/13/2009')
SELECT ISDATE('13/11/2009')
于 2009-05-28T13:19:09.037 回答
1

我认为在 select 中不可能进行 try catch,但是在使用存储过程时可以在外部进行。

begin try
    select cast(strartnr as int) from table
end try
begin catch 
    select 10000 from table
end catch
于 2009-05-28T13:42:23.077 回答