Anuncios

martes, 29 de septiembre de 2009

Manejo de errores en SQL SERVER


SQL Server 2005 o superior incorpora el manejo de excepciones mediante un try y un catch en su lenguaje T-SQL.

La sintaxis es la siguiente:

BEGIN TRY

/*El código de lo que piensas ejecutar*/

END TRY

BEGIN CATCH

/*El mensaje de error en caso de que falle el try*/

END CATCH

Es muy simple, para los que ya programaron en otros lenguajes, no necesitan más explicaciones. Para los que nunca usaron un try, catch, la idea es la siguiente:

TRY permite tratar de ejecutar el código que programamos.

CATCH permite manejar y mandar mensajes de error generados durante el try.

Ejemplo de manejo de errores usando TRY, CATCH EN T-SQL

Vamos a hacer que este procedimiento almacenado de factorial devuelva el siguiente mensaje si existe un overflow (que el número exceda los rangos permitidos):

create procedure factorial

@fact bigint

as

BEGIN TRY

declare @res bigint

set @res =1;

while(@fact != 1)

begin

set @res = @res*@fact;

set @fact = @fact - 1;

end

print (@res)

END TRY

BEGIN CATCH

print 'El Numero no puede ser superior a 20'

END CATCH

Lo que hace este ejemplo de procedimiento almacenado es devolver el factorial de un número. Si por ejemplo le damos de parámetro de entrada 3 devolverá de resultado de factorial 6.

Este procedimiento almacenado devuelve un mensaje de error si el parámetro de entrada es superior a 20.

Si quieren más ejemplos o tienen dudas, pueden escribir a este blog.


REFERENCIAS:

http://msdn.microsoft.com/es-bo/library/ms175976(SQL.90).aspx


miércoles, 23 de septiembre de 2009

Programación de T-SQL de procedimientos almacenados

Varias personas solo saben hacer consultas simples en sql server, sin embargo se puede programar bastantes cosas en SQL Server.

Este artículo muestra un ejemplo de un procedimiento almacenado que muestra el factorial de un número.

Primero creamos el procedimiento almacenado, luego la llamamos.

Este es un buen ejemplo porque podemos apreciar las sentencias if, los ciclos while en sql server.

Este código funciona en cualquier sql server.

Para más información y ejemplos sobre creación de procedimientos almacenados en sql server:

http://msdn.microsoft.com/es-es/library/ms187926(SQL.90).aspx

Para más información y ejemplos sobre el uso del if en sql server:

http://msdn.microsoft.com/es-es/library/ms182717(SQL.90).aspx

Para más información y ejemplos sobre el uso del while en sql server:

http://msdn.microsoft.com/es-es/library/ms178642(SQL.90).aspx

/* Cortesía de Ariel Romero

Si existe el procedimiento, borrarlo*/

IF OBJECT_ID ('factorial','P') IS NOT NULL

DROP PROCEDURE factorial;

GO

CREATE PROCEDURE factorial

@num bigint

AS

IF(@num <= 1)

PRINT (1)

ELSE

BEGIN

DECLARE @res bigint

SET @res = @num;

SET @num = @num - 1;

WHILE(@num > 1)

BEGIN

SET @res = @res * @num;

SET @num = @num - 1;

END

PRINT (@res)

END

Para ejecutar el procedimiento almacenado vamos a ver el factorial de 3 que tendría que retornar 6:

execute factorial '3';

miércoles, 16 de septiembre de 2009

Cómo determinar la versión, el service pack, edición de sql server

Cómo determinar la versión, el service pack, edición de sql server

Muchas veces queremos saber que service pack está instalado en sql server, otras veces queremos saber rápidamente si es sql server edición estándar, developer o Enterprise. Este artículo contiene una función que muestra automáticamente estos datos.

Otras veces queremos saber si es sql server 2000, 2005 o superior.

El siguiente link indica como determinar la versión:

http://support.microsoft.com/kb/321185/es

Ahora, para hacer las consultas velozmente me hice una función que muestra estos datos automáticamente.

El código es el siguiente:

CREATE FUNCTION version()

RETURNS TABLE

AS

RETURN

(

SELECT SERVERPROPERTY('productversion') as Numero,

SERVERPROPERTY ('productlevel') as [service pack],

SERVERPROPERTY ('edicion') as edition, @@version as version

);

Hemos creado la función que retorna, la versión del producto, el service pack, la edicion y la version comercial.


Ahora si quiero ver los datos de mi función tengo que hacer los siguiente:

select * from version()

Ahora, si solo quiero saber el service pack uso lo siguiente:

select [service pack] from version()

Para saber si sql server es la edición de sql server

select edition from version()

Para saber la version de sql server

select version from version()

Si tienes dudas de este tema o quieres alguna función especial. Solo tienes que escribir a este blog.