[SQL] Instrucciones básicas de SQL 2005.

30 01 2009

Hola amigos, en esta ocasión este post va dedicado a las personas que se inician en las consultas de base de datos y sus operaciones básicas como lo son el INSERT, UPDATE, DELETE y SELECT.

Colocare un ejemplo de cada instrucción:

INSERT:

INSERT INTO <TABLA> (<CAMPOS A INSERTAR>) VALUES (<VALORES A INSERTAR>)

INSERT INTO dbo.USUARIO_SYS (nombre, apellidos, email, pass, fecha_add)
                     VALUES ('JOSE','PEREZ','mail@mail.com','a47825',GETDATE() )

SELECT:

SELECT <CAMPOS> FROM <TABLA>

WHERE <CONDICIONES> ORDER BY <CRITERIOS DE ORDENACION>

SELECT id, nombre, apellidos, email, pass, fecha_add FROM dbo.USUARIO_SYS
WHERE id < 12 ORDER BY nombre, apellidos

UPDATE:

UPDATE <TABLA> SET <CAMPO N> = <VALOR>

WHERE <CONDICION DE ACTUALIZACION>

UPDATE dbo.USUARIO_SYS SET nombre = 'FLORIPONDIO', apellidos = 'MADALENO'
WHERE id = 12

DELETE:

DELETE FROM <TABLA> WHERE <CONDICION DE ELIMINACION>

DELETE FROM dbo.USUARIO_SYS WHERE id = 12

Espero les sea de ayuda, dejen comentarios!!!





[SQL Mail TSQL] Envió de correos desde SQL 2005 parte 2.

28 01 2009

Saludos nuevamente amigos, si leyeron el post anterior y todo les funciono correctamente, les será sumamente sencillo realizar el siguiente script TSQL, lo que haremos es enviar correos electrónicos con código TSQL desde un perfil ya configurado en el post anterior, a continuación les coloco el código:

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'sqlPsyPerfil',--Perfil de correo configurado.
    @recipients = 'ivan.rangel.c@gmail.com', -- A quien se va enviar el correo.
    @body = 'Este correo es enviado desde SQL Server 2005 con código TSQL por sqlPsyKrest Blog',--Cuerpo del correo.
    @subject = 'Correo desde TSQL - MS SQL 2005 sqlPsyKrest.',--Asunto del correo.
    @importance = 'High' --[Low | Normal| High] Prioridad del correo.

 

En el script anterior se hizo uso del procedimiento almacenado de Sistema sp_send_dbmail, su función es la de enviar mensajes de correo electrónico desde la base de datos, para ejecutarlo este necesita una serie de parámetros, los cuales no todos son necesarios, los que en este caso se utilizan son:

@profile_name: Perfil de correo de donde se enviara el correo.

@recipients: Destinatarios del correo uno o más.

@body: Cuerpo del correo, por default es de tipo texto.

@subject: Asunto del correo.

@importance = Prioridad del envío del correo.

Dependiendo de la carga que tenga su servidor y de la prioridad configurada en el envió del correo, el correo llegara o se tardara mas tiempo en ser enviado, si no existieron problemas, el correo llegara correctamente a su destino.

image

Ahora enviaremos un correo electrónico con TSQL a partir de una consulta a una Tabla formateada en Tabla HTML.

DECLARE @tableHTML  NVARCHAR(MAX);

SET @tableHTML = 
N'<table border="1" cellpadding="5" cellspacing="0">'+
N'<thead>'+
N'<tr style=''background: Navy;    color: White;font-weight: bold;''>'+
N'<th>Id</th>'+
N'<th>Nombre</th>'+
N'<th>Apellidos</th>'+
N'<th>Email</th>'+
N'<th>Pass</th>'+
N'</tr>'+
N'</thead>'+
N'<tbody>'+
CAST ( ( SELECT td = id, '',
                td = nombre, '',
                td = apellidos, '',
                td = email, '',
                td = pass, ''                
              FROM dbo.USUARIO_SYS
              ORDER BY nombre, apellidos                       
              FOR XML PATH('tr'), TYPE 
    ) AS NVARCHAR(MAX) ) + 
N'</tbody>'+
N'</table>'


EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'sqlPsyPerfil',
    @recipients = 'ivan.rangel.c@gmail.com',    
    @subject = 'Correo desde TSQL 2005 con HTML',
    @body = @tableHTML,
    @body_format = 'HTML',
    @importance = 'High'

Como primer paso declaramos un variable @tablaHTML la cual contendra el cuerpo del mensaje en formato de tabla HTML con ayuda de la clausula FOR XML vista ya en posts anteriores, lo que hace la consulta es tranformar los datos de consulta en texto con características de lenguaje de marcado HTML.

Por ultimo solo nos queda asignar la variable @tablaHTML como nuestro contenido del mensaje, he indicar que el formato del mensaje será HTML con @body_format = ‘HTML’, los demas parametros ya sabemos como configurarlos, y de nuevo solo nos queda esperar a que llegue el correo a su destino como lo muestra la siguiente imagen.

image

Espero les sea de ayuda. Dejen Comentarios!!!





[SQL Mail] Envió de Correos desde SQL 2005.

28 01 2009

Saludos amigos, en esta ocasión explicare un breve ejemplo de como configurar la Superficie de SQL Server para el envió de correos electrónicos.

Como primer paso tienen que ir a la opción del menú de Microsoft SQL Server 2005 >>  Herramientas de configuración >> Configuración de superficie de SQL server.

image

Aparecerá una ventana de configuración de la cual deben de dar clic en la opción de Configuración de superficie para características

image

En la ventana que se abre, del árbol de opciones, en el nodo Motor de base de datos>> Correo electrónico de base de datos, deben de activar la casilla que dice: Habilitar procedimientos almacenados de correo electrónico de base de datos y dar clic en el botón aplicar.

image

La otra opción a configurar es la de SQL Mail al mismo nivel del árbol de opciones, y activar la casilla que dice: Habilitar procedimientos almacenados de SQL Mail, dar clic en el botón aplicar y posteriormente en aceptar.

image

Hasta este momento están habilitadas las opciones de correo electrónico, falta configurar una cuenta y un perfil, el cual servirá para enviar los correos electrónicos. Antes de comenzar necesitas los siguientes datos que son los mismos de una cuenta que se configura en Microsoft Outlook.

  1. Dirección de correo electrónico.
  2. Servidor de correo saliente SMTP.

Nota: Si tu servidor de salida requiere autenticación necesitas anexar:

  1. Nombre de usuario (SMTP).
  2. Contraseña (SMTP).

Ya que tienes a la mano esos datos, te vas al Explorador de objetos de SQL Server 2005 y en la opción del árbol de opciones Administración >> Correo electrónico de base de datos haces clic derecho y del menú contextual seleccionas la opción Configurar correo electrónico de base de datos.

image

 

En el asistente de configuración de correo, seleccionen la casilla de Instalar Correo electrónico de base de datos y den clic en siguiente.

image

Les aparecerá una ventana para crear un perfil de correo, escriban un nombre de perfil y una descripción.

image

ahora tendremos que crear una cuenta SMTP al perfil, hacemos clic en el botón Agregar…, Aparecerá  una ventana para agregar una nueva cuenta de correo, escriban un nombre de cuenta, descripción, la dirección de correo de la que se enviaran los correos, un nombre a mostrar, el nombre del servidor de salida, y si lo requiere, los datos de autenticación SMTP con el nombre de usuario y contraseña, den clic en el botón Aceptar y posteriormente en el botón siguiente .

 

image 

Aparecerá una ventana de Administrar la seguridad del perfil, de la lista de perfiles seleccionen el que acabamos de crear y damos clic en el botón Siguiente.

image

En la ventana de Configurar parámetros del sistema hacemos clic en Siguiente.

En la ventana de Finalización del asistente damos clic en Finalizar.

Si todos los datos fueron correctos, aparecerá una ventana de Configurando que indicara que la configuración de correo se ejecuto correctamente, no debe de aparecer ningún error o advertencia y por ultimo damos clic en el botó Cerrar.

image

Ahora solo nos queda enviar un correo electrónico de prueba, nos vamos al explorador de objetos en el nodo Administración >> Correo electrónico de base da datos, damos clic derecho y seleccionamos la opción Enviar correo electrónico de prueba.

 

image

 

Aparecer una pequeña ventana donde seleccionaremos el perfil que creamos hace algunos pasos, escribiremos la dirección de correo a la que queremos enviar,  un asunto y cuerpo del mensaje, damos clic en el botón Enviar correo electrónico.

 

image

Ahora solo nos queda esperar que haya llegado el correo electrónico y si es así listo!!! ya tenemos todo funcionando para el envió de Correos desde SQL Server 2005.

image

En el próximo Post enviaremos correos desde código TSQL utilizando el perfil que acabamos de crear.

Espero les sea de ayuda, Dejen cometarios!!!





[XML] Generar XML con SQL 2005.

23 01 2009

Saludos amigos, en esta ocasión estoy preparando algunos ejemplos de como generar código XML desde consultas en SQL 2005, algunas de las opciones más sencillas y rápidas para obtener datos con formato XML son:

Tabla a la cual aplicaremos las consultas:

image

Primera forma de obtener XML con la clausula FOR XML AUTO: 

SELECT * FROM dbo.USUARIO_SYS AS Usuario
FOR XML AUTO, TYPE, ROOT('Usuarios')

Devuelve un nodo Raíz llamado Usuarios y un nodo Usuario por cada una de las filas devueltas en la consulta, las cuales contienen atributos que son cada uno de los campos de la tabla.

<Usuarios>
  <Usuario id="7" nombre="Claudia" apellidos="Perez Torres" email="clau@mail.com" pass="a220109" fecha_add="2009-01-22T12:18:36.343" fecha_upd="2009-01-22T12:18:36.343" />
  <Usuario id="10" nombre="Ivan" apellidos="Rangel Cuadros" email="ivan@mail.com" pass="852465" fecha_add="2009-01-23T00:00:00" fecha_upd="2009-01-23T00:00:00" />
  <Usuario id="11" nombre="Carol" apellidos="Rangel" email="Zepeda" pass="789123" fecha_add="2009-01-23T00:00:00" fecha_upd="2009-01-23T00:00:00" />
  <Usuario id="12" nombre="Tin" apellidos="Tin" email="tin@tin.com" pass="456798" fecha_add="2009-01-24T00:00:00" fecha_upd="2009-01-24T00:00:00" />
</Usuarios>

 

Segunda forma con la clausula FOR XML RAW:

SELECT * FROM dbo.USUARIO_SYS AS Usuario
FOR XML RAW('NodoUsuario'), ROOT('Usuarios')

Devuelve el nodo raíz Usuarios, y por cada fila devuelta en la consulta un nodo llamado NodoUsuario, por lo tanto con RAW podemos asignar un nombre a cada fila de retorno de nuestras consultas.

<Usuarios>
  <NodoUsuario id="7" nombre="Claudia" apellidos="Perez Torres" email="clau@mail.com" pass="a220109" fecha_add="2009-01-22T12:18:36.343" fecha_upd="2009-01-22T12:18:36.343" />
  <NodoUsuario id="10" nombre="Ivan" apellidos="Rangel Cuadros" email="ivan@mail.com" pass="852465" fecha_add="2009-01-23T00:00:00" fecha_upd="2009-01-23T00:00:00" />
  <NodoUsuario id="11" nombre="Carol" apellidos="Rangel" email="Zepeda" pass="789123" fecha_add="2009-01-23T00:00:00" fecha_upd="2009-01-23T00:00:00" />
  <NodoUsuario id="12" nombre="Tin" apellidos="Tin" email="tin@tin.com" pass="456798" fecha_add="2009-01-24T00:00:00" fecha_upd="2009-01-24T00:00:00" />
</Usuarios>

 

Tercera forma con la clausula XML AUTO, Elements:

SELECT * FROM dbo.USUARIO_SYS AS Usuario
FOR XML AUTO, Elements, ROOT('Usuarios')

Devuelve un XML formado por elementos, es decir que por cada fila que devuelva la consulta se agregara al XML como un elemento y por cada columna se agregara un nodo sin atributos.

<Usuarios>
  <Usuario>
    <id>7</id>
    <nombre>Claudia</nombre>
    <apellidos>Perez Torres</apellidos>
    <email>clau@mail.com</email>
    <pass>a220109</pass>
    <fecha_add>2009-01-22T12:18:36.343</fecha_add>
    <fecha_upd>2009-01-22T12:18:36.343</fecha_upd>
  </Usuario>
  <Usuario>
    <id>10</id>
    <nombre>Ivan</nombre>
    <apellidos>Rangel Cuadros</apellidos>
    <email>ivan@mail.com</email>
    <pass>852465</pass>
    <fecha_add>2009-01-23T00:00:00</fecha_add>
    <fecha_upd>2009-01-23T00:00:00</fecha_upd>
  </Usuario>
  <Usuario>
    <id>11</id>
    <nombre>Carol</nombre>
    <apellidos>Rangel</apellidos>
    <email>Zepeda</email>
    <pass>789123</pass>
    <fecha_add>2009-01-23T00:00:00</fecha_add>
    <fecha_upd>2009-01-23T00:00:00</fecha_upd>
  </Usuario>
  <Usuario>
    <id>12</id>
    <nombre>Tin</nombre>
    <apellidos>Tin</apellidos>
    <email>tin@tin.com</email>
    <pass>456798</pass>
    <fecha_add>2009-01-24T00:00:00</fecha_add>
    <fecha_upd>2009-01-24T00:00:00</fecha_upd>
  </Usuario>
</Usuarios>

Estas son algunas de las formas de generar datos XML, espero y les sirva de ayuda, en otro post preparare información para guardar y consultar datos de variables o documentos XML.

Dejen comentarios!!!

Etiquetas de Technorati: ,,,,




[SQL] Procedimiento almacenado para Insertar datos con transacción y control de errores.

22 01 2009

Hola amigos, en muchas ocasiones no sabemos si estamos realizando correctamente un proceso de inserción, actualización o eliminación de datos a una tabla(s), esto para muchos es sumamente sencillo, pero me di a la tarea de preparar un pequeño ejemplo de esto.  El script de T-Sql consiste en realizar un procedimiento almacenado que reciba los datos necesarios para insertarlos en la tabla, para garantizar la ejecución correcta de las inserciones utilizo las transacciones “Transact SQL” y para validar la reversión de la transacción en caso de que ocurra un ERROR utilizo el control de Errores Try – Catch con RollBack.

¿Qué es una Transacción?

Una transacción es un conjunto de operaciones T-SQL que funcionan como un solo bloque de instrucciones, esto significa que si ocurre un fallo durante la ejecución de alguna instrucción del bloque todas las demás fallaran, lo que implica que nada más se ejecutara y la transacción tendrá que deshacer todo lo que había ejecutado hasta donde ocurrió el fallo, a eso se la llama reversión de la transacción y se ejecuta con un ROLLBACK, en caso de una ejecución correcta se tendrá que grabar la transacción con COMMIT, el objetivo de las transacciones es garantizar que los datos que se inserten, actualicen o eliminen queden CONSISTENTES en la base de datos.

Después de una ligera explicación de las Transacciones veremos el siguiente ejemplo de una inserción dentro de un procedimiento almacenado con transacción.

Definiendo las estructuras.

1. La estructura del SP es:

CREATE PROCEDURE nombreProdedimiento
    -- Parámetros del SP
    @Param1 AS Varchar(25),
    @Param2 AS Bigint
    .
    .
    .
AS
BEGIN    

    -- Insertar bloque de instrucciones a ejecutar.
    /*
        SELECT
        UPDATE
        INSERT
        DELETE
        Lo que quieras....
    */
END
GO

 

2. La estructura del control de errores TRY-CATCH es:

Begin Try

    /*Bloque de instrucciones a validar.
    -----------------------------------------
    -----------------------------------------
    -----------------------------------------*/

End Try
Begin Catch
    /*Bloque de instrucciones que se ejecutan si ocurre
    un ERROR.
    -----------------------------------------
    -----------------------------------------
    -----------------------------------------*/
End Catch

3. La estructura de una Transacción es:

Begin Tran NombreTransaccion--Inicio de la transacción con su nombre Tadd o el que elijas.

    /*Bloque de instrucciones a ejecutar en la Transacción
    ---------------------------------------
    ---------------------------------------*/

Commit Tran NombreTransaccion--Confirmación de la transacción.

Rollback Tran NombreTransaccion--Reversión de la transacción.

 

4. Para finalizar veremos todo lo anterior armado ya en conjunto de SP, Transacción y control de Errores.

-- =============================================
-- Author:        Ivan Rangel Cuadros.
-- Create date: 22/Ene/2009
-- Description:    Procedimiento para Insertar registros en una Tabla con transacción y control de errores.
-- =============================================
CREATE PROCEDURE spAgregaUsuario
    @nom AS VARCHAR(50),
    @ape AS VARCHAR(50),
    @ema AS VARCHAR(30),
    @pas AS VARCHAR(20),
    @idJer AS BIGINT,
    @msg AS VARCHAR(100) OUTPUT

AS
BEGIN

    SET NOCOUNT ON;

    Begin Tran Tadd

    Begin Try

        INSERT INTO dbo.USUARIO_SYS (nombre, apellidos, email, pass, fecha_add) VALUES (@nom, @ape, @ema, @pas, GETDATE())

        INSERT INTO dbo.USUARIO_JERARQUIAS_SYS (id_usuario, id_jerarquia) VALUES (@@IDENTITY, @idJer)

        SET @msg = 'El Usuario se registro correctamente.'

        COMMIT TRAN Tadd

    End try
    Begin Catch

        SET @msg = 'Ocurrio un Error: ' + ERROR_MESSAGE() + ' en la línea ' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.'
        Rollback TRAN Tadd

    End Catch

END
GO

 

Explicando el procedimiento:

1. Recibe los datos a través de parámetros de los cuales uno es de salida OutPut , que servirá para indicar si la Inserción se realizo correctamente o no.

2. Crea una transacción llamada Tadd, valida con TRY-CATCH las inserciones a las tablas USUARIO y USUARIO_JERARQUIAS.

3. Si las operaciones de inserción se ejecutan correctamente las confirma con COMMIT TRAN Tadd y regresa la variable @msg con un valor de confirmación correcto, si ocurre un error se revierte la transacción con ROLLBACK TRAN Tadd y devuelve en @msg un valor de error.

Ejecutando el Procedimiento:

DECLARE @msg AS VARCHAR(100);
EXEC spAgregaUsuario 'Claudia','Perez Torres','clau@mail.com','a220109',1,@msg OUTPUT
SELECT @msg AS msg

Mensaje de inserción correcta:

image

Mensaje de Error en la Transacción:

image

 

votaPorMiBlogIvan

Apóyame votando aquí: http://blogit.ms/TopBloggers.aspx en la categoría SQL Server.

Los pasos para votar están aquí te llevara 3 min: Clic Aquí. 

Espero les sea de ayuda. Dejen comentarios!!!








Seguir

Get every new post delivered to your Inbox.