InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial de Transact SQL
Introducción a Transact SQL
Programación con Transact SQL
Fundamentos de Transact SQL
Tipos de datos en Transact SQL
Variables en Transact SQL
Equivalencia de datos de SQL Server y .NET
Operadores en Transact SQL
Estructuras de control en Transact SQL
Control de errores en Transact SQL
Consultar datos en Transact SQL
Consultas agregadas
Select FOR XML
Operaciones con conjuntos.
Insertar datos en Transact SQL
Actualizar datos en Transact SQL
Borrar datos en Transact SQL
Transacciones en Transact SQL
Procedimientos almacenados en Transact SQL
Funciones en Transact SQL
Funciones integradas de Transact SQL (I)
Triggers en Transact SQL
Cursores en Transact SQL
SQL dinámico en Transact SQL
También puedes ver ...
Simular TRUNC en SQL Server
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008
SET IDENTITY_INSERT ON y LinqToSQL
SQL Server 2008
LinQ To SQL - Un ejemplo sencillo
Formatear números en SQL Server
Leer un campo XML de SQL Server 2005 con C#
SQL dinámico en Transact SQL
Cursores en Transact SQL
Triggers en Transact SQL


Estructuras de control en Transact SQL

Estructura condicional IF

    La estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO), y ejecutar las operaciones contenidas en el bloque formado por BEGIN END.


IF (<expresion>)
BEGIN
...

END
ELSE IF (<expresion>)
BEGIN
...

END
ELSE
BEGIN
...

END

    Ejemplo de la estructura condicional IF.


    DECLARE @Web varchar(100),
          @diminutivo varchar(3)
   
    SET @diminutivo = 'DJK'
   
    IF  @diminutivo = 'DJK'
        BEGIN
            PRINT 'www.devjoker.com'
        END
    ELSE
      BEGIN
            PRINT 'Otra Web (peor!)'  
      END

    La estructura IF admite el uso de subconsultas:


DECLARE @coPais int,
@descripcion varchar(255)
set @coPais = 5
set
@descripcion = 'España'
IF EXISTS(SELECT * FROM PAISES 
WHERE CO_PAIS = @coPais)
BEGIN
UPDATE PAISES
SET
DESCRIPCION = @descripcion
WHERE
CO_PAIS = @coPais
END

ELSE
BEGIN
INSERT INTO
PAISES
(CO_PAIS, DESCRIPCION) VALUES
(@coPais, @descripcion)
END

Estructura condicional CASE

    La estructura condicional CASE permite evaluar una expresion y devolver un valor u otro.

    La sintaxis general de case es:


    CASE <expresion>
        WHEN <valor_expresion> THEN <valor_devuelto>
        WHEN <valor_expresion> THEN <valor_devuelto>
        ELSE <valor_devuelto> -- Valor por defecto
    END

    Ejemplo de CASE.



    DECLARE @Web varchar(100),
            @diminutivo varchar(3)
    SET @diminutivo = 'DJK'
    SET @Web = (CASE @diminutivo
                    WHEN 'DJK' THEN 'www.devjoker.com'
                    WHEN 'ALM' THEN 'www.aleamedia.com'
                    ELSE 'www.devjoker.com'
                END)
    PRINT @Web 

    Otra sintaxis de CASE nos permite evaluar diferentes expresiones:


    CASE
        WHEN <expresion> = <valor_expresion> THEN <valor_devuelto>
        WHEN <expresion> = <valor_expresion> THEN <valor_devuelto>
        ELSE <valor_devuelto> -- Valor por defecto

    END

    El mismo ejemplo aplicando esta sintaxis:


    DECLARE @Web varchar(100),
            @diminutivo varchar(3)
    SET @diminutivo = 'DJK'

    SET @Web = (CASE
                    WHEN @diminutivo = 'DJK' THEN 'www.devjoker.com'
                    WHEN @diminutivo = 'ALM' THEN 'www.aleamedia.com'
                    ELSE 'www.devjoker.com'
                END)
    PRINT @Web 

    Otro aspecto muy interesante de CASE es que permite el uso de subconsultas.


    DECLARE @Web varchar(100),
            @diminutivo varchar(3)
    SET @diminutivo = 'DJK'

    SET @Web = (CASE
                    WHEN @diminutivo = 'DJK' THEN (SELECT  web
                                                   FROM WEBS
                                                   WHERE id=1
)
                    WHEN @diminutivo = 'ALM' THEN (SELECT  web
                                                  
FROM
WEBS
                                                  
WHERE
id=2)
                    ELSE 'www.devjoker.com'
                END)
    PRINT @Web 

Bucle WHILE

     El bucle WHILE se repite mientras expresion se evalue como verdadero.

    Es el único tipo de bucle del que dispone Transact SQL.


    WHILE <expresion> 
    BEGIN
      ...
    END

    Un ejemplo del bucle WHILE.


    DECLARE @contador int
    SET @contador = 0
    WHILE (@contador < 100)
    BEGIN
      SET @contador = @contador + 1

    PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)
    END

    Podemos pasar a la siguiente iteración del bucle utilizando CONTINUE.


    DECLARE @contador int
    SET @contador = 0
    WHILE (@contador < 100)
    BEGIN
      SET @contador = @contador + 1
IF (@contador % 2 = 0)
       CONTINUE
    PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)
    END

    El bucle se dejará de repetir con la instrucción BREAK.


    DECLARE @contador int
    SET @contador = 0
    WHILE (1 = 1)
    BEGIN
      SET @contador = @contador + 1
IF (@contador % 50 = 0)
       BREAK
    PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)
    END

    También podemos utilizar el bucle WHILE conuntamente con subconsultas.


    DECLARE @coRecibo int   
    WHILE  EXISTS (SELECT *
                   FROM RECIBOS
                   WHERE PENDIENTE = 'S')-- Ojo, la subconsulta se ejecuta
-- una vez por cada iteracion
-- del bucle!

    BEGIN
      SET @coRecibo = (SELECT TOP 1 CO_RECIBO
FROM RECIBOS WHERE PENDIENTE = 'S')
        UPDATE RECIBOS
        SET PENDIENTE = 'N'
        WHERE CO_RECIBO = @coRecibo
    END

Estructura GOTO

    La sentencia goto nos permite desviar el flujo de ejecución hacia una etiqueta. Fué muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema @@ERROR para el control de errores.

    Actualmente, se desaconseja el uso GOTO, recomendandose el uso de TRY - CATCH para la gestion de errores.


    DECLARE @divisor int,
            @dividendo int,
            @resultado int
    SET @dividendo = 100
    SET @divisor = 0
    SET @resultado = @dividendo/@divisor           
   
    IF @@ERROR > 0
        GOTO error
       
    PRINT 'No hay error'
    RETURN
error:
    PRINT 'Se ha producido una division por cero'

 


Inicio | Tutorial de Transact SQL Operadores en Transact SQLTutorial de Transact SQLControl de errores en Transact SQL Versión para imprimir Foros de consulta

 
gracias me ayudaste mucho por Jennifer
Respuesta recibida el [13/06/2007 10:08:00]
Hola solo queria agracecerte, por la magnifica labor que haces, y apare de eso, quiero saber si tiene estructuras de : do while y for

 
El único bucle que soporta Tra... por Devjoker
Respuesta recibida el [13/06/2007 03:04:10]
El único bucle que soporta Transact SQL es WHILE

 
Esta re chido por Heysel
Respuesta recibida el [07/09/2007 11:32:11]
la neta si le sabes y explicas bien chido felcidades esta re guena tu pagina

 
muy buen tutorial por Elizabeth
Respuesta recibida el [09/09/2007 12:24:40]
solo felicitarte por tu pagina y decirte  que me gusto el tutorial, es muy buen tutorial,muy bien explicado todo y gracias porque me ayudaste mucho

 
Sitio muy completo e interesante por Claudia
Respuesta recibida el [02/11/2007 11:45:47]
Solo felicitarlos por el sitio que me parece super completo, didáctico e interesante.

 
Excelente trabajo... por luis_ery
Respuesta recibida el [22/01/2008 02:09:51]
Ni en pag. en inglés ni en español había encontrado la tematica desarrollada tan sencilla y perfectamnete explicada... Felicidades... 

 
WOW GRACIAS por Brenda Padilla
Respuesta recibida el [14/04/2008 03:01:14]
WOW Mil gracias por esta página, yo tengo 7 años de experiencia en Oracle pl/sql y de repente cambie de trabajo en donde usan sql server 2005, se me cerro el mundo por no conocer la sintaxis de programación, pero esta página me ha ayudado mucho. Gracias !!

 
excelente trabajo por kevin
Respuesta recibida el [28/04/2008 02:42:28]
Excelente  trabajo solo quiero saber que puedo usar para leer todas las  filas de un campo algo con el for each

 
Excelente tutorial por Oscar
Respuesta recibida el [29/05/2008 10:01:11]
Solo queria agradecerte por el excelente tutorial que desarrollaste aquí...

Es claro, consiso y preciso

Good job

 
me sirvio por ezequiel
Respuesta recibida el [02/07/2008 07:19:58]
La verdad que me parece muy buen tutorial, me agrego esta pagina a favoritos! saludos desde Argentina

 
opinion por Resis
Respuesta recibida el [21/10/2008 05:38:30]
La verdad es que que buenos aportes para la comunidad

 
Un matiz sobre CASE por Diego
Respuesta recibida el [10/01/2009 04:41:38]
Te felicito por el manual. Sólo un detalle en esta página y es que CASE no es una estructura de control de flujo sino una expresión. Un saludo desde Barcelona

 
Modulo? por GUIOOS
Respuesta recibida el [20/04/2009 09:57:20]
Si lo que quieres es mostrar (no lo creo así) el módulo de la operación de la forma que usas el primer while,if,CONTINUE no te muestra la esperado ya que al modulo 2=0 te da cuando el número es par y como esta redactdo parece lo contrari (nones)
--Comentando la palabra continue si imprime el modulo de forma correcta (solo números pares (2-98))
Saludos!

 
... por GUIOOS
Respuesta recibida el [20/04/2009 09:59:19]
O acaso continue funciona cuando el resultado de la expresión en if es falsa?
--Si si para preguntar esta el foro...

 
Mis Respetos por Jeffrey Vargas
Respuesta recibida el [18/12/2009 10:10:39]
Gracias man por esos codigos...la verdad mas se aprende en la cancha que en el trabajo...
Suerte y Saludos


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial de Transact SQL Operadores en Transact SQLTutorial de Transact SQLControl de errores en Transact SQL Versión para imprimir

Estructuras de control en Transact SQL
Autor: Pedro Herrarte Sánchez
Visitas: 57185 Fecha de publicación: 12/06/2007
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 109 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 809 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 764 | Comentarios: 3 | Archivo: Articulos
Visitas: 3177 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14561 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1497 | Comentarios: 3 | Archivo: Articulos
Visitas: 695 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2034 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
certificado por jhon jairo vargas ... [Actualidad] 1 13/03/2010
devolver consulta en form builder de oracle con like por cesar10lb ... [ORACLE] 0 13/03/2010
certificado de cesantias horizonte por yeimmy ... [Actualidad] 4 13/03/2010
solicito certificado de pensiones y sesantias para laborar por maria eugenia garcia m. ... [Actualidad] 0 13/03/2010
certificado de fondos de pensiones horizonte por mona ... [Actualidad] 6 03/03/2010
certificado pensiones por nelly moreno ... [Actualidad] 0 13/03/2010
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 125 12/01/2010
cerificado fondo horizonte de pensiones y cesantias por carlos fideligno torres herrera ... [Actualidad] 147 18/01/2010
certuficado de afiliacion a porvenir por ede ... [Actualidad] 6 05/02/2010
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 136 26/01/2010
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 59 10/02/2010
necesito certificado de afiliacíon a pensiones por jelo ... [Actualidad] 0 12/03/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
11/03/2008 Problemas en la instalación de Visual Studio 2008-Visual studio web authoring component
19/08/2006 Virtualización. Maquinas Virtuales.
04/01/2007 Modificadores de visibilidad de bloques get y set    forma parte de...Tutorial C#
18/09/2008 Generar archivos PDF con C#
07/12/2006 Operadores relacionados con código inseguro    forma parte de...Tutorial C#
05/12/2008 Instalar SQL server enterprise en Vista o XP
27/10/2006 Eventos    forma parte de...Tutorial C#
30/05/2006 Poner un fondo en la Barra de herramientas de Mi PC y el Explorador de Windows
11/08/2007 Proyecto informático
16/10/2006 Delegados y eventos    forma parte de...Tutorial C#

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]