Estructura repetitiva While SQL Server

Usando While

La estructura While es una estructura repetitiva que permite ejecutar un bloque de instrucciones mientras que una expresión lógica sea verdadera.

Sintaxis

While (Expresión Lógica)
Begin
Conjunto de instrucciones del bloque
[BREAK | CONTINUE]
End
Donde
Expresión Lógica: es una expresión que retorna verdadero o falso. Los paréntesis serán necesarios si la expresión lógica tiene una instrucción Select.
BREAK
Provoca una salida del bucle WHILE más interno. Se ejecutan todas las declaraciones que aparecen después de la palabra clave END, que marcan el final del ciclo.
CONTINUE
Hace que el ciclo WHILE se reinicie, ignorando cualquier declaración después de la palabra clave CONTINUE.

Ejercicios

Usando la base de datos Northwind
use Northwind
go

Ejercicio 1

While dentro de un cursor (Ver Cursores)
Cursor que reporte la lista de productos, si las unidades en orden son mayores al stock, mostrar COMPRAR URGENTE, de lo contrario mostrar STOCK ADECUADO

Declare cursorProductoComprasUrgente cursor for
SELECT
P.ProductID, P.ProductName,
P.UnitsInStock, P.UnitsOnOrder
from Products As P
Open cursorProductoComprasUrgente
Declare @Codigo int, @Descripcion nvarchar(40),
@Stock Numeric(9,2), @PorAtender Numeric(9,2)
Fetch cursorProductoComprasUrgente into @Codigo,
@Descripcion, @Stock, @PorAtender
Print ‘================ LISTADO ======================’
While (@@FETCH_STATUS = 0)
Begin
Declare @Mensaje nvarchar(20)
If (@PorAtender > @Stock)
Begin
Set @Mensaje = ‘COMPRAR URGENTE’
End
Else
Begin
Set @Mensaje = ‘STOCK ADECUADO’
End
Print ‘Código: ‘ + STR(@Codigo)
Print ‘Descripción: ‘ + @Descripcion + ‘ Stock: ‘ + Ltrim(STR(@Stock)) + ‘ Por Atender: ‘ + Ltrim(Str(@PorAtender))
Print ‘Mensaje: ‘ + @Mensaje
Print »
Print ‘==============================================================’
Fetch cursorProductoComprasUrgente into @Codigo,
@Descripcion, @Stock, @PorAtender
End
Close cursorProductoComprasUrgente
Deallocate cursorProductoComprasUrgente
go
El resultado se muestra en la siguiente imagen

Ejercicio 2

En este ejercicio se va a insertar en una tabla intervalos de cada media hora, desde las 00 horas hasta las 24 horas y en un campo se va a especificar las horas, de 1 a 24.

drop table if exists Horas
go
create table Horas
(
Intervalo Time, Hora nchar(10)
)
go
— Insertar
Set nocount on
Declare @Vez int, @Hora Time, @Intervalo int
set @Vez = 1
Set @Hora = ‘0:00 am’
Set @Intervalo = 1
while (@Vez <= 48)
Begin
if ((@Vez%2) = 0 )
Begin
insert into horas values (@Hora, »)
End
Else
Begin
insert into horas values (@Hora, @Intervalo)
Set @Intervalo = @Intervalo +1
End
Set @Vez = @Vez +1
Set @Hora = DATEADD(MI,30, @Hora)
End
go
set dateformat dmy
go
select format(H.Intervalo,’hh\:mm’ ) As Intervalo, Hora from horas As H
go
El resultado se muestra en la siguiente imagen

Ejercicio 3

Uso de la estructura While para recorrer los caracteres de una cadena de texto. Se va a crear una función definida por el usuario que recibe como parámetro la cadena de texto.
Create or alter function dbo.fduRetornaVocalesConsonantes (@Palabra nvarchar(200))
Returns nvarchar(100)
As
Begin
Declare @Dato nvarchar(200), @Letra nvarchar(1)
set @Dato = Upper(Replace(LTRIM(RTRIM(@Palabra)),’ ‘,»))
Declare @Inicio int, @TotalVocales int, @TotalConsonantes int
set @Inicio = 1
Set @TotalVocales = 0
set @TotalConsonantes = 0
while @Inicio <= LEN(@Dato)
Begin
set @Letra = SUBSTRING(@Dato,@Inicio,1)
if @Letra in (‘A’,’E’,’I’,’O’,’U’,’Á’,’É’,’Í’,’Ó’,’Ú’)
Begin
Set @TotalVocales = @TotalVocales +1
End
Else
Begin
Set @TotalConsonantes = @TotalConsonantes +1
End
Set @Inicio = @Inicio +1
End
Declare @Resultado nvarchar(200)
Set @Resultado = ‘La frase «‘ + Upper(@Palabra) + ‘» tiene ‘ +
LTRIM(STR(@TotalVocales)) +’ vocales y ‘ + LTRIM(Str(@TotalConsonantes)) + ‘ consonantes’
return @Resultado
End
go

Ejecutando la FDU para una cadena de texto
Select dbo.fduRetornaVocalesConsonantes(‘SQL Server Guía Profesional’)
As ‘Resultado’
go
El resultado se muestra en la siguiente imagen