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 に答える