Frage

Ist es möglich, TRY CATCH-Blöcke in SQL Selects zu benutzen?

Für Material ähnlich wie das zum Beispiel:

select 
   order, 
   CONVERT(DATETIME, orderDate)
from orders

Was ist der beste Weg, um dieses Szenarios des Umgangs mit?

War es hilfreich?

Lösung

Ich weiß nicht, über Try-Catch, aber in SQL Server haben Sie die ISDATE-Funktion und kann es so etwas wie

CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END

Andere Tipps

In MS SQL Server 2012 gibt es ein neues Konstrukt, das genau das tut, was gefragt wird:


SELECT 
    CASE WHEN TRY_CONVERT(float, 'test') IS NULL 
    THEN 'Cast failed'
    ELSE 'Cast succeeded'
END AS Result;
    GO

Siehe auch http://msdn.microsoft.com/en-us/library/hh230993.aspx

In der SELECT-Klausel selbst, Nr.

Sie können für einen Tag testen obwohl mit ISDATE ()

select 
   order, 
   CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END
from orders

Ich glaube nicht, ein Versuch fängt innerhalb eines ausgewählten möglich ist, aber außerhalb ist möglich, wenn Sie mit gespeicherten Prozeduren arbeiten.

begin try
    select cast(strartnr as int) from table
end try
begin catch 
    select 10000 from table
end catch

Sie können die Funktion ISDATE () verwenden:

SELECT ISDATE('11/13/2009')
SELECT ISDATE('13/11/2009')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top