Beruflich Dokumente
Kultur Dokumente
exec pa_libros_limite_stock;
Entonces, para ejecutar un procedimiento almacenado colocamos "execute" (o "exec") seguido del
nombre del procedimiento.
Cuando realizamos un ejercicio nuevo, siempre realizamos las mismas tareas: eliminamos la tabla
si existe, la creamos y luego ingresamos algunos registros. Podemos crear un procedimiento
almacenado que contenga todas estas instrucciones:
create procedure pa_crear_libros
as
if object_id('libros')is not null
drop table libros;
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
primary key(codigo)
);
insert into libros values('Uno','Richard Bach','Planeta',15);
insert into libros values('Ilusiones','Richard Bach','Planeta',18);
insert into libros values('El aleph','Borges','Emece',25);
insert into libros values('Aprenda PHP','Mario Molina','Nuevo
siglo',45);
insert into libros values('Matematica estas ahi','Paenza','Nuevo
siglo',12);
insert into libros values('Java en 10 minutos','Mario
Molina','Paidos',35);
Y luego lo ejecutamos cada vez que comenzamos un nuevo ejercicio y as evitamos tipear tantas
sentencias:
exec pa_crear_libros;
Creamos el procedimiento:
create procedure pa_crear_libros
as
if object_id('libros')is not null
drop table libros
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
cantidad smallint,
primary key(codigo)
)
insert into libros values('Uno','Richard Bach','Planeta',15,5)
insert into libros values('Ilusiones','Richard Bach','Planeta',18,50)
insert into libros values('El aleph','Borges','Emece',25,9)
insert into libros values('Aprenda PHP','Mario Molina','Nuevo
siglo',45,100)
insert into libros values('Matematica estas ahi','Paenza','Nuevo
siglo',12,50)
insert into libros values('Java en 10 minutos','Mario
Molina','Paidos',35,300);
Disponemos un punto y coma (;) en la ltima instruccin del procedimiento almacenado.
Ejecutamos el procedimiento:
exec pa_crear_libros;
Veamos si ha creado la tabla:
select *from libros;
Ejecutamos el procedimiento almacenado del sistema "sp_help" y el nombre del procedimiento
almacenado para verificar que existe el procedimiento creado recientemente:
sp_help pa_crear_libros;
Aparece el nombre, propietario, tipo y fecha de creacin.
Necesitamos un procedimiento almacenado que muestre los libros de los cuales hay menos de 10.
En primer lugar, lo eliminamos si existe:
if object_id('pa_libros_limite_stock') is not null
drop procedure pa_libros_limite_stock;
Creamos el procedimiento:
create proc pa_libros_limite_stock
as
select *from libros
where cantidad <=10;
exec pa_crear_libros;
sp_help pa_crear_libros;
sp_help pa_libros_limite_stock;
exec pa_libros_limite_stock;
Primer problema:
Una empresa almacena los datos de sus empleados en una tabla llamada "empleados".
1- Eliminamos la tabla, si existe y la creamos:
if object_id('empleados') is not null
drop table empleados;
create table empleados(
documento char(8),
nombre varchar(20),
apellido varchar(20),
sueldo decimal(6,2),
cantidadhijos tinyint,
seccion varchar(20),
primary key(documento)
);
2- Ingrese algunos registros:
insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria');
insert into empleados values('22333333','Luis','Lopez',300,0,'Contaduria');
insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas');
insert into empleados values('22555555','Susana','Garcia',400,2,'Secretaria');
insert into empleados values('22666666','Jose Maria','Morales',400,3,'Secretaria');
3- Elimine el procedimiento llamado "pa_empleados_sueldo" si existe:
if object_id('pa_empleados_sueldo') is not null
drop procedure pa_empleados_sueldo;
4- Cree un procedimiento almacenado llamado "pa_empleados_sueldo" que seleccione
los nombres, apellidos y sueldos de los empleados.
5- Ejecute el procedimiento creado anteriormente.
6- Elimine el procedimiento llamado "pa_empleados_hijos" si existe:
if object_id('pa_empleados_hijos') is not null
drop procedure pa_empleados_hijos;
7- Cree un procedimiento almacenado llamado "pa_empleados_hijos" que seleccione
los nombres,
apellidos y cantidad de hijos de los empleados con hijos.
8- Ejecute el procedimiento creado anteriormente.
9- Actualice la cantidad de hijos de algn empleado sin hijos y vuelva a ejecutar el
procedimiento
para verificar que ahora si aparece en la lista.
documento char(8),
nombre varchar(20),
apellido varchar(20),
sueldo decimal(6,2),
cantidadhijos tinyint,
seccion varchar(20),
primary key(documento)
);
insert
insert
insert
insert
insert
into
into
into
into
into
empleados
empleados
empleados
empleados
empleados
values('22222222','Juan','Perez',300,2,'Contaduria');
values('22333333','Luis','Lopez',300,0,'Contaduria');
values ('22444444','Marta','Perez',500,1,'Sistemas');
values('22555555','Susana','Garcia',400,2,'Secretaria');
values('22666666','Jose Maria','Morales',400,3,'Secretaria');
Si el procedimiento que queremos eliminar no existe, aparece un mensaje de error, para evitarlo,
podemos emplear esta sintaxis:
if object_id('NOMBREPROCEDIMIENTO') is not null
drop procedure NOMBREPROCEDIMIENTO;
Eliminamos, si existe, el procedimiento "pa_libros_autor", si no existe, mostramos un mensaje:
if object_id('pa_libros_autor') is not null
drop procedure pa_libros_autor
else
select 'No existe el procedimiento "pa_libros_autor"';
"drop procedure" puede abreviarse con "drop proc".
Se recomienda ejecutar el procedimiento almacenado del sistema "sp_depends" para ver si algn
objeto depende del procedimiento que deseamos eliminar.
Podemos eliminar una tabla de la cual dependa un procedimiento, SQL Server lo permite, pero
luego, al ejecutar el procedimiento, aparecer un mensaje de error porque la tabla referenciada
no existe.
primary key(codigo)
)
insert into libros values('Uno','Richard Bach','Planeta',15,5)
insert into libros values('Ilusiones','Richard Bach','Planeta',18,50)
insert into libros values('El aleph','Borges','Emece',25,9)
insert into libros values('Aprenda PHP','Mario Molina','Nuevo
siglo',45,100)
insert into libros values('Matematica estas ahi','Paenza','Nuevo
siglo',12,50)
insert into libros values('Java en 10 minutos','Mario
Molina','Paidos',35,300);
Verificamos que existe:
sp_help pa_crear_libros;
Aparece.
Lo eliminamos sin corroborar su existencia:
drop proc pa_crear_libros;
Vemos si aparece en la lista de objetos que muestra "sp_help":
sp_help pa_crear_libros;
Aparece un mensaje de error indicando que no existe.
Solicitamos su eliminacin nuevamente:
drop proc pa_crear_libros;
No existe, aparece un mensaje de error.
Solicitamos su eliminacin verificando si existe, si no existe, mostramos un mensaje:
if object_id('pa_crear_libros') is not null
drop proc pa_crear_libros
else
select 'No existe el procedimiento "pa_crear_libros"';
sp_help pa_crear_libros;
as
if object_id('libros')is not null
drop table libros
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
cantidad smallint,
primary key(codigo)
)
insert into libros values('Uno','Richard Bach','Planeta',15,5)
insert into libros values('Ilusiones','Richard Bach','Planeta',18,50)
insert into libros values('El aleph','Borges','Emece',25,9)
insert into libros values('Aprenda PHP','Mario Molina','Nuevo siglo',45,100)
insert into libros values('Matematica estas ahi','Paenza','Nuevo siglo',12,50)
insert into libros values('Java en 10 minutos','Mario Molina','Paidos',35,300);
sp_help pa_crear_libros;
sp_help pa_crear_libros;
as
select titulo,autor,editorial,precio
from libros
where autor like @autor and
editorial like @editorial;
La sentencia siguiente ejecuta el procedimiento almacenado "pa_libros_autor_editorial3"
enviando un valor por posicin, se asume que es el primero.
exec pa_libros_autor_editorial3 'P%';
La sentencia siguiente ejecuta el procedimiento almacenado "pa_libros_autor_editorial3"
enviando un valor para el segundo parmetro, para el primer parmetro toma el valor por
defecto:
exec pa_libros_autor_editorial3 @editorial='P%';
Tambin podramos haber tipeado:
exec pa_libros_autor_editorial3 default, 'P%';
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla si existe y la creamos nuevamente:
if object_id('libros') is not null
drop table libros;
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros values ('Uno','Richard Bach','Planeta',15);
insert into libros values ('Ilusiones','Richard Bach','Planeta',12);
insert into libros values ('El aleph','Borges','Emece',25);
exec pa_libros_autor_editorial2;
apellido varchar(20),
sueldo decimal(6,2),
cantidadhijos tinyint,
seccion varchar(20),
primary key(documento)
);
2- Ingrese algunos registros:
insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria');
insert into empleados values('22333333','Luis','Lopez',300,0,'Contaduria');
insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas');
insert into empleados values('22555555','Susana','Garcia',400,2,'Secretaria');
insert into empleados values('22666666','Jose Maria','Morales',400,3,'Secretaria');
3- Elimine el procedimiento llamado "pa_empleados_sueldo" si existe:
if object_id('pa_empleados_sueldo') is not null
drop procedure pa_empleados_sueldo;
4- Cree un procedimiento almacenado llamado "pa_empleados_sueldo" que seleccione
los nombres,
apellidos y sueldos de los empleados que tengan un sueldo superior o igual al enviado
como
parmetro.
5- Ejecute el procedimiento creado anteriormente con distintos valores:
exec pa_empleados_sueldo 400;
exec pa_empleados_sueldo 500;
6- Ejecute el procedimiento almacenado "pa_empleados_sueldo" sin parmetros.
Mensaje de error.
7- Elimine el procedimiento almacenado "pa_empleados_actualizar_sueldo" si existe:
if object_id('pa_empleados_actualizar_sueldo') is not null
drop procedure pa_empleados_actualizar_sueldo;
8- Cree un procedimiento almacenado llamado "pa_empleados_actualizar_sueldo" que
actualice los
sueldos iguales al enviado como primer parmetro con el valor enviado como segundo
parmetro.
9- Ejecute el procedimiento creado anteriormente y verifique si se ha ejecutado
correctamente:
exec pa_empleados_actualizar_sueldo 300,350;
select *from empleados;
10- Ejecute el procedimiento "pa_empleados_actualizar_sueldo" enviando un solo
parmetro.
Error.
11- Ejecute el procedimiento almacenado "pa_empleados_actualizar_sueldo" enviando
en primer lugar el
parmetro @sueldonuevo y en segundo lugar @sueldoanterior (parmetros por
nombre).
into
into
into
into
into
empleados
empleados
empleados
empleados
empleados
values('22222222','Juan','Perez',300,2,'Contaduria');
values('22333333','Luis','Lopez',300,0,'Contaduria');
values ('22444444','Marta','Perez',500,1,'Sistemas');
values('22555555','Susana','Garcia',400,2,'Secretaria');
values('22666666','Jose Maria','Morales',400,3,'Secretaria');
from empleados
where sueldo>=@sueldo;
exec pa_empleados_sueldo 400;
exec pa_empleados_sueldo 500;
exec pa_empleados_sueldo;
if object_id('pa_empleados_actualizar_sueldo') is not null
drop procedure pa_empleados_actualizar_sueldo;
create procedure pa_empleados_actualizar_sueldo
@sueldoanterior decimal(6,2),
@sueldonuevo decimal(6,2)
as
update empleados set sueldo=@sueldonuevo
where sueldo=@sueldoanterior;
exec pa_empleados_actualizar_sueldo 300,350;
select *from empleados;
exec pa_empleados_actualizar_sueldo 350;
exec pa_empleados_actualizar_sueldo @sueldonuevo=400,@sueldoanterior=350;
select *from empleados;
if object_id('pa_sueldototal') is not null
drop procedure pa_sueldototal;
create procedure pa_sueldototal
@documento varchar(8) = '%'
as
select nombre,apellido,
sueldototal=
case
when sueldo<500 then sueldo+(cantidadhijos*200)
when sueldo>=500 then sueldo+(cantidadhijos*100)
end
from empleados
where documento like @documento;
exec pa_sueldototal '22333333';
exec pa_sueldototal '22444444';
exec pa_sueldototal '22666666';
exec pa_sueldototal;
Dijimos que los procedimientos almacenados pueden devolver informacin; para ello se emplean
parmetros de salida. El valor se retorna a quien realiz la llamada con parmetros de salida.
Para que un procedimiento almacenado devuelva un valor se debe declarar una variable con la
palabra clave "output" al crear el procedimiento:
create procedure NOMBREPROCEDIMIENTO
@PARAMETROENTRADA TIPO =VALORPORDEFECTO,
@PARAMETROSALIDA TIPO=VALORPORDEFECTO output
as
SENTENCIAS
select @PARAMETROSALIDA=SENTENCIAS;
Los parmetros de salida pueden ser de cualquier tipo de datos, excepto text, ntext e image.
Creamos un procedimiento almacenado al cual le enviamos 2 nmeros y retorna el promedio:
create procedure pa_promedio
@n1 decimal(4,2),
@n2 decimal(4,2),
@resultado decimal(4,2) output
as
select @resultado=(@n1+@n2)/2;
Al ejecutarlo tambin debe emplearse "output":
declare @variable decimal(4,2)
execute pa_promedio 5,6, @variable output
select @variable;
Declaramos una variable para guardar el valor devuelto por el procedimiento; ejecutamos el
procedimiento envindole 2 valores y mostramos el resultado.
La instruccin que realiza la llamada al procedimiento debe contener un nombre de variable para
almacenar el valor retornado.
Creamos un procedimiento almacenado que muestre los ttulos, editorial y precio de los libros de
un determinado autor (enviado como parmetro de entrada) y nos retorne la suma y el promedio
de los precios de todos los libros del autor enviado:
create procedure pa_autor_sumaypromedio
@autor varchar(30)='%',
@suma decimal(6,2) output,
@promedio decimal(6,2) output
as
select titulo,editorial,precio
from libros
where autor like @autor
select @suma=sum(precio)
from libros
where autor like @autor
select @promedio=avg(precio)
from libros
where autor like @autor;
Ejecutamos el procedimiento y vemos el contenido de las variables en las que almacenamos los
parmetros de salida del procedimiento:
declare @s decimal(6,2), @p decimal(6,2)
execute pa_autor_sumaypromedio 'Richard Bach', @s output, @p output
select @s as total, @p as promedio;
);
Ingresamos algunos registros:
insert into libros values
insert into libros values
insert into libros values
insert into libros values
siglo',50);
insert into libros values
siglo',18);
insert into libros values
Bach','Sudamericana',14);
insert into libros values
insert into libros values
XXI',45);
insert into libros values
('Uno','Richard Bach','Planeta',15);
('Ilusiones','Richard Bach','Planeta',12);
('El aleph','Borges','Emece',25);
('Aprenda PHP','Mario Molina','Nuevo
('Matematica estas ahi','Paenza','Nuevo
('Puente al infinito','Richard
('Antologa','J. L. Borges','Paidos',24);
('Java en 10 minutos','Mario Molina','Siglo
('Antologa','Borges','Planeta',34);
Ejecutamos el procedimiento sin pasar el parmetro para autor. Recuerde que en estos casos
debemos colocar los nombres de las variables.
declare @s decimal(6,2), @p decimal(6,2)
execute pa_autor_sumaypromedio @suma=@s output,@promedio= @p output
select @s as total, @p as promedio;
as
select titulo,editorial,precio
from libros
where autor like @autor
select @suma=sum(precio)
from libros
where autor like @autor
select @promedio=avg(precio)
from libros
where autor like @autor;
Primer problema:
Una empresa almacena los datos de sus empleados en una tabla llamada "empleados".
1- Eliminamos la tabla, si existe y la creamos:
if object_id('empleados') is not null
drop table empleados;
create table empleados(
documento char(8),
nombre varchar(20),
apellido varchar(20),
sueldo decimal(6,2),
cantidadhijos tinyint,
seccion varchar(20),
primary key(documento)
);
2- Ingrese algunos registros:
insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria');
insert into empleados values('22333333','Luis','Lopez',350,0,'Contaduria');
insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas');
insert into empleados values('22555555','Susana','Garcia',null,2,'Secretaria');
insert into empleados values('22666666','Jose Maria','Morales',460,3,'Secretaria');
insert into empleados values('22777777','Andres','Perez',580,3,'Sistemas');
insert into empleados values('22888888','Laura','Garcia',400,3,'Secretaria');
3- Elimine el procedimiento llamado "pa_seccion" si existe:
if object_id('pa_seccion') is not null
drop procedure pa_seccion;
4- Cree un procedimiento almacenado llamado "pa_seccion" al cual le enviamos el
nombre de una
seccin y que nos retorne el promedio de sueldos de todos los empleados de esa
seccin y el valor
mayor de sueldo (de esa seccin)
5- Ejecute el procedimiento creado anteriormente con distintos valores.
6- Ejecute el procedimiento "pa_seccion" sin pasar valor para el parmetro "seccin".
Luego muestre
los valores devueltos por el procedimiento.
Calcula sobre todos los registros porque toma el valor por defecto.
7- Elimine el procedimiento almacenado "pa_sueldototal", si existe y cree un
procedimiento con ese
nombre que reciba el documento de un empleado y retorne el sueldo total, resultado
de la suma del
sueldo y salario por hijo, que es $200 si el sueldo es menor a $500 y $100 si es mayor
o igual.
8- Ejecute el procedimiento anterior enviando un documento existente.
into
into
into
into
into
into
into
empleados
empleados
empleados
empleados
empleados
empleados
empleados
values('22222222','Juan','Perez',300,2,'Contaduria');
values('22333333','Luis','Lopez',350,0,'Contaduria');
values ('22444444','Marta','Perez',500,1,'Sistemas');
values('22555555','Susana','Garcia',null,2,'Secretaria');
values('22666666','Jose Maria','Morales',460,3,'Secretaria');
values('22777777','Andres','Perez',580,3,'Sistemas');
values('22888888','Laura','Garcia',400,3,'Secretaria');
La instruccin "return" sale de una consulta o procedimiento y todas las instrucciones posteriores
no son ejecutadas.
Creamos un procedimiento que muestre todos los libros de un autor determinado que se ingresa
como parmetro. Si no se ingresa un valor, o se ingresa "null", se muestra un mensaje y se sale del
procedimiento:
create procedure pa_libros_autor
@autor varchar(30)=null
as
if @autor is null
begin
select 'Debe indicar un autor'
return
end;
select titulo from libros where autor = @autor;
Si al ejecutar el procedimiento enviamos el valor "null" o no pasamos valor, con lo cual toma el
valor por defecto "null", se muestra un mensaje y se sale; en caso contrario, ejecuta la consulta
luego del "else".
"return" puede retornar un valor entero.
Un procedimiento puede retornar un valor de estado para indicar si se ha ejecutado
correctamente o no.
Creamos un procedimiento almacenado que ingresa registros en la tabla "libros". Los parmetros
correspondientes al ttulo y autor DEBEN ingresarse con un valor distinto de "null", los dems son
opcionales. El procedimiento retorna "1" si la insercin se realiza, es decir, si se ingresan valores
para ttulo y autor y "0", en caso que ttulo o autor sean nulos:
create procedure pa_libros_ingreso
@titulo varchar(40)=null,
@autor varchar(30)=null,
@editorial varchar(20)=null,
@precio decimal(5,2)=null
as
if (@titulo is null) or (@autor is null)
return 0
else
begin
insert into libros values (@titulo,@autor,@editorial,@precio)
return 1
end;
Para ver el resultado, debemos declarar una variable en la cual se almacene el valor devuelto por
el procedimiento; luego, ejecutar el procedimiento asignndole el valor devuelto a la variable,
finalmente mostramos el contenido de la variable:
declare @retorno int
exec @retorno=pa_libros_ingreso 'Alicia en el pais...','Lewis Carroll'
select 'Ingreso realizado=1' = @retorno
exec @retorno=pa_libros_ingreso
select 'Ingreso realizado=1' = @retorno;
Tambin podramos emplear un "if" para controlar el valor de la variable de retorno:
declare @retorno int;
exec @retorno=pa_libros_ingreso 'El gato con botas','Annimo'
if @retorno=1 print 'Registro ingresado'
else select 'Registro no ingresado porque faltan datos';
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla si existe y la creamos nuevamente:
if object_id('libros') is not null
drop table libros;
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros values
insert into libros values
insert into libros values
insert into libros values
siglo',50);
insert into libros values
siglo',18);
insert into libros values
Bach','Sudamericana',14);
insert into libros values
insert into libros values
XXI',45);
insert into libros values
('Uno','Richard Bach','Planeta',15);
('Ilusiones','Richard Bach','Planeta',12);
('El aleph','Borges','Emece',25);
('Aprenda PHP','Mario Molina','Nuevo
('Matematica estas ahi','Paenza','Nuevo
('Puente al infinito','Richard
('Antologa','J. L. Borges','Paidos',24);
('Java en 10 minutos','Mario Molina','Siglo
('Antologa','Borges','Planeta',34);
exec pa_libros_autor;
into
into
into
into
into
into
into
empleados
empleados
empleados
empleados
empleados
empleados
empleados
values('22222222','Juan','Perez',2,'Contaduria');
values('22333333','Luis','Lopez',0,'Contaduria');
values ('22444444','Marta','Perez',NULL,'Sistemas');
values('22555555','Susana','Garcia',2,'Secretaria');
values('22666666','Jose Maria','Morales',1,'Secretaria');
values('22777777','Andres','Perez',3,'Sistemas');
values('22888888','Laura','Garcia',3,'Secretaria');
as
if (@documento is null) or (@hijos is null)
return 0
else
begin
update empleados set cantidadhijos=@hijos where documento=@documento
return 1
end;
declare @retorno int
exec @retorno=pa_actualizarhijos '22222222',3
select 'Registro actualizado=1' = @retorno;
select *from empleados;
declare @retorno int
exec @retorno=pa_actualizarhijos '22333333'
select 'Registro actualizado=1' = @retorno;
select *from empleados;
declare @retorno int
exec @retorno=pa_actualizarhijos '22333333',2
if @retorno=1 select 'Registro actualizado'
else select 'Registro no actualizado, se necesita un documento y la cantidad de hijos';
select *from empleados;
declare @retorno int
exec @retorno=pa_actualizarhijos @hijos=4
if @retorno=1 select 'Registro actualizado'
else select 'Registro no actualizado, se necesita un documento y la cantidad de hijos';
);
Ingresamos algunos registros:
insert into libros values
insert into libros values
insert into libros values
insert into libros values
siglo',50);
insert into libros values
siglo',18);
insert into libros values
Bach','Sudamericana',14);
insert into libros values
insert into libros values
XXI',45);
insert into libros values
('Uno','Richard Bach','Planeta',15);
('Ilusiones','Richard Bach','Planeta',12);
('El aleph','Borges','Emece',25);
('Aprenda PHP','Mario Molina','Nuevo
('Matematica estas ahi','Paenza','Nuevo
('Puente al infinito','Richard
('Antologa','J. L. Borges','Paidos',24);
('Java en 10 minutos','Mario Molina','Siglo
('Antologa','Borges','Planeta',34);
sp_stored_procedures 'pa_%';
Ejecutamos "sp_depends" seguido del nombre del procedimiento "pa_autor_promedio":
sp_depends pa_autor_promedio;
Obtenemos la siguiente informacin: los objetos de los cuales depende el procedimiento, en este
caso, los campos y tablas referenciadas en el mismo: el nombre del objeto (libros), el tipo de
objeto (tabla), el campo (autor y precio) y dems informacin que no analizaremos.
En caso que haya objetos que dependen del procedimiento, aparece otra tabla; aqu no aparece
porque el procedimiento no tiene objetos que dependan de l.
Ejecutamos el procedimiento "sp_depends" seguido del nombre de la tabla "libros":
sp_depends libros;
aparece todos los objetos que dependen de ella; en este caso, nicamente el procedimiento
creado anteriormente.
Consultamos la tabla del sistema "sysobjects":
select *from sysobjects;
Nos muestra nombre y varios datos de todos los objetos de la base de datos actual. La columna
"xtype" indica el tipo de objeto. "P" indica que es un procedimiento almacenado.
Recuperamos todos los procedimientos almacenados creados por nosotros de la tabla "sysobjects":
select *from sysobjects
where xtype='P' and-- tipo procedimiento
name like 'pa%';--bsqueda con comodn
deben aparecer el procedimiento creado anteriormente.
Eliminamos el procedimiento:
drop proc pa_autor_promedio;
Ejecutamos "sp_depends" seguido del nombre de la tabla "libros":
sp_depends libros;
Aparece un mensaje indicando que la tabla no tiene objetos que dependan de ella ni ella
depende de ningn objeto.
select @promedio=avg(precio)
from libros
where autor like @autor;
sp_help pa_autor_promedio;
sp_helptext pa_autor_promedio;
sp_stored_procedures;
sp_stored_procedures 'pa_%';
sp_depends pa_autor_promedio;
sp_depends libros;
sp_depends libros;