-- ============================================= -- Create: Andrés Aiello -- Create date: 17/11/11 -- Description: Ejemplo de manejo de errores en SQL2012 aca Denali -- ============================================= -- Llenemos una tabla con valores para poder probar CREATE TABLE #Temp(id INT PRIMARY KEY, campo2 INT, campo3 VARCHAR(100)) INSERT INTO #Temp SELECT 1, 1, '1' INSERT INTO #Temp SELECT 2, 1, '001' INSERT INTO #Temp SELECT 3, 1, 'fake1' INSERT INTO #Temp SELECT 4, 1, 'fullfake' INSERT INTO #Temp SELECT 5, 1, '01/31/2012' INSERT INTO #Temp SELECT 6, 1, '31/01/2012' -- Primera prueba: ver el contenido SELECT * FROM #Temp -- Segunda prueba: Castear la columna 3 a entero usando la vieja forma SELECT CONVERT(INT, campo3) FROM #Temp /* Resultado: Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'fake1' to data type int. */ -- Tercera prueba: Hacer lo mismo pero con Try_Convert SELECT TRY_CONVERT(INT, campo3) FROM #Temp -- No hay error!!! Los dos primeros registros se convirtieron y los siguientes 3 son nulos -- Cuarta prueba: Hacer lo mismo pero con fechas SELECT CONVERT(DATE, campo3) FROM #Temp /* Resultado: Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string. */ -- Cuarta prueba: Hacer lo mismo pero con Parse SELECT PARSE(campo3 AS DATETIME) FROM #Temp -- Error!!! pero si usamos TRY_PARSE... SELECT id, TRY_PARSE(campo3 AS DATETIME USING 'en-US') FROM #Temp -- La salida parsea los valores que pudo y deja en nulo el resto! -- Y si cambiamos la referencia cultural... SELECT id, TRY_PARSE(campo3 AS DATETIME USING 'es-ES') FROM #Temp -- Obtenemos otro de los registros!!! sin tener que recordar los odiosos codigos 101 etc DROP TABLE #Temp
Mas info: http://msdn.microsoft.com/en-us/library/hh213126%28v=sql.110%29.aspx