SET NOCOUNT ON;

DECLARE @idautor int
DECLARE @nombre varchar(30)
DECLARE @direccion varchar(30)
DECLARE @telefono varchar(8)

DECLARE @cadena varchar(100)

DECLARE cursor_autores CURSOR FOR select * from autores
OPEN cursor_autores

FETCH NEXT FROM cursor_autores INTO
@idautor,@nombre,@direccion,@telefono

WHILE @@FETCH_STATUS = 0
BEGIN
set @cadena=cast(@idautor as varchar(10)) + ' ' +
@nombre + ' ' + @telefono
print(@cadena)

FETCH NEXT FROM cursor_autores INTO
@idautor,@nombre,@direccion,@telefono

END

CLOSE cursor_autores
DEALLOCATE cursor_autores

//////////////////////////////////////////////////////////////

use base

create table movimientos(
idmov int,
fecha date,
idcliente int,
monto money,

fn_mes(month(fecha)) as mes from dbo. nroserie int ) insert movimientos values (124.120.movimientos select idmov. dbo. fecha.210) create function fn_mes (@nmes int) RETURNS varchar(20) BEGIN Declare @mensaje varchar(20) IF @nmes IS NULL SET @mensaje = 'No Aplicable' else if @nmes=1 SET @mensaje = 'Enero' else if @nmes=2 SET @mensaje = 'Febrero' else if @nmes=3 SET @mensaje = 'Marzo' else if @nmes=4 SET @mensaje = 'Abril' RETURN @mensaje END Para probar la función: select idmov.'20140110'.150.150) insert movimientos values (125.fn_mes(month(fecha)) mes from dbo.'20140323'.movimientos .12000.40000.12000. dbo.'20140213'.220) insert movimientos values (126.150. fecha.

salario /*para que estructura*/ from empleado a inner join departamento b on a. nombre varchar(50).//////////////////// DECLARE demo_cursor CURSOR FOR select a.@salario print cast (@codigo as varchar(10))+' '+@nomemp --doble arroba es pro que es una variable WHILE @@fetch_status=0 BEGIN print cast (@codigo as varchar(10))+' '+@nomemp FETCH NEXT FROm demo_cursor INTO @codigo.iddpto DECLARE @codigo int DECLARE @nomemp varchar(50) DECLARE @nomdpto varchar(50) DECLARE @salario money OPEN demo_cursor --para ubicarme en el primer registro --si mi cursor tiene n variables mi into debe ser n into FETCH NEXT FROM demo_cursor INTO @codigo.@nomdpto. iddpto int foreign key references departamento ) .@nomemp.nombre.@salario END --en teoria se peude convertir de cualqueir tipo de dato a cualquier tipo de dato CLOSE demo_cursor DEALLOCATE demo_cursor create table empleado ( cod int primary key.nombre.a.a.@nomemp.@nomdpto. salario money.iddpto=b.cod. b.

'juan'.'ate'.'TRE') create database ejm use ejm create database s13 use s13 create table AUTORES( idAutor int not null primary key.4855.100.'Carlos'.6955.'Pablo Doig'. telefono varchar(30) ) insert into AUTORES values(1. nombre varchar(50) ) insert empleado values(07.3) insert departamento values(3.'Lima'.'renzo'.4) insert departamento values(4.'222-2222') insert into AUTORES values(2.'Lima'.'aba'.'333-3333') insert into AUTORES values(3.'Lurin'.create table departamento ( iddpto int primary key.900.'666- 6666') insert into AUTORES values(6.'ICA'.'COI') insert empleado values(09.'555-5555') insert into AUTORES values(5.'eva'.'tat') insert empleado values(08.'Pablo '.'777-7777') .'juan'.'lorena'.'PD') insert empleado values(10.'444-4444') insert into AUTORES values(4.1) insert departamento values(1. direcciones varchar(50).2) insert departamento values(2. nombre varchar(30).'Lince'.'bryan'.

@telefono END CLOSE cursor_autores DEALLOCATE cursor_autores /////////////// Los Clustered Indexes son índices que controlan el orden físico de las filas en la tabla.----------Implementación de un CURSOR---------------------------------- SET NOCOUNT ON.' + @nombre + ' ' + @telefono + ' . DECLARE @idautor int DECLARE @nombre varchar(30) DECLARE @direccion varchar(30) DECLARE @telefono varchar(8) DECLARE @cadena varchar(100) DECLARE cursor_autores CURSOR FOR select * from autores OPEN cursor_autores FETCH NEXT FROM cursor_autores INTO @idautor.@telefono WHILE @@FETCH_STATUS = 0 BEGIN set @cadena=cast(@idautor as varchar(10)) + ' .@direccion. Los Non-Clustered indexes son índices que mantienen un sub conjunto de las columnas de la tabla en orden. . por lo cual solo puede existir uno para cada tabla. Estos indices no modifican el orden de las filas de la tabla.@nombre. en lugar de esto mantienen una lista ordenada de referencias a filas de la tabla original.' +@direccion print(@cadena) FETCH NEXT FROM cursor_autores INTO @idautor.@direccion.@nombre.

Esto mismo es lo que pasa cuando utilizo un índice Non-Clustered index una vez que encuentro lo que quiero en el índice debo ir a leer la fila específica para obtener el resto de los datos. En el caso de las páginas amarillas de la guía telefónica la forma de buscar es un poco distinta. una vez que lo encuentro obtendré su número de teléfono en forma inmediata pues el numero está al lado del nombre. Primero busco en un índice.Para ilustrar la diferencia entre estos 2 tipos de índices podemos decir que las páginas blancas de la guía telefónica tienen un clustered index por Apellido(s) y Nombres. . en este caso busco por rubro. el cual me indica en qué página se encuentra la lista de empresas que satisfacen la condición que busco. con lo cual puedo buscar de forma muy eficiente el número de teléfono de una persona si conozco sus apellidos y su nombre.