procedimientos almacenados en transac SQL

PROCEDIMIENTOS ALMACENADOS EN TRANSAC SQL
procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.

He aqui les enseñare como crear un procedimiento almacenado
//crear un procedimiento almacenado

create procedure addcliente
@id_cliente int,@nombre varchar(50),@apellidos varchar(50),@dni char(8)
as
insert into cliente
(id_cliente,nombre,apellidos,dni)
values(@id_cliente,@nombre,@apellidos,@dni)

//ejecurar el procedimiento almacenado

exec addcliente 3,'Peter','Herrante Sanchez',41524789
exec addcliente 4,'jefry','Ramirez calderon',45507941

//las intrucciones del procedure deben estar dentro de un bloque try catch y controlados por una transaccion
// para insertar clientes a la BD
alter procedure addcliente
@id_cliente int,
@nombre varchar(50),
@apellidos varchar(50),
@dni char(8)
as
begin try
begin tran
insert into cliente
(id_cliente,nombre,apellidos,dni)
values(@id_cliente,@nombre,@apellidos,@dni)
commit
end try
begin catch
rollback
print error_message()
end catch
// para ejecutar la insercion de clientes a la BD
exec addcliente 4,'Margoth','Rengifo de la Cruz',45508563

//para obtener una cuenta de una persona tal

create procedure obtener cuenta3
@id_cuenta int,
@cantidad decimal(9,2)output
as
begin
select @cantidad=cantidad
from cuenta
where id_cuenta=@id_cuenta
end

declare @cantidad decimal(9,2)
exec obtenercuenta3 '2',@cantidad output
print @cantidad

//procedimento al macenado para devolver valores

create procedure spu_estaennumerosrojos
@id_cuenta int
as
begin
if(select cantidad
from cuenta
where id_cuenta=@id_cuenta)<100.00
begin
return 1
end
else
return 0
end

//procedimiento almacenado q devuelve un conjunti de datos

create procedure spu_movimientoscuenta
@id_cuenta int
as
begin
select @id_cuenta,
cantidad
id_cliente
from transaccion inner join cuenta
on transaccion.id_cuenta=cuenta.id_cuenta
where cuenta.id_cuenta=@id_cuenta
order by cantidad desc
end
exec spu_movimientoscuenta

---

creando trigger en transac sql

CREANDO TRIGGER EN TRANSAC SQL
trigger (o disparador) en una Base de datos , es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Dependiendo de la base de datos, los triggers pueden ser de inserción (INSERT), actualización (UPDATE) o borrado (DELETE). Algunas bases de datos pueden ejecutar triggers al crear, borrar o editar usuarios, tablas, bases de datos u otros objetos.

He aqui les dejare un ejemplo de como se crea un trigger en transac SQL utilizando la siguiente BD

use bd_cuenta   //-- para llamar a la BD

//-- trigger dml, es para crear una restrigcion de alguna tabla

create trigger tr_cuenta
on cuenta
after update
as begin set nocount on--set nocount on impide que se generen mensajes de texto
set nocount on;
insert into cuenta(id_cuenta,cantidad)
select id_cuenta,cantidad
from inserted
end

//para ejecutar el trigger

update cuenta
set cantidad=cantidad + 10
where id_cuenta=2

select * from cuenta  // para visualizar  la tabla

//para alterar el trigger


alter trigger tr_cuenta
on cuenta
after update as
  begin--set nocount impide que se generen mensajes de texto--con cada instruccion
  set nocount on;
  if update(cantidad)--solo si se actualiza el saldo
     begin insert into cuenta(id_cuenta,cantidad)
     select id_cuenta,cantidad
     from insert    
end
end

alter trigger tr_cuenta
on cuenta
after update as
  begin--set nocount impide que se generen mensajes de texto--con cada instruccion
  set nocount on;
  if update(cantidad)--solo si se actualiza el saldo
     begin insert into cuenta(id_cuenta,cantidad)
     select id_cuenta,cantidad
     from insert
     rollback
    end
end

//para desabilitar el trigger tr_cuenta

disable trigger tr_cuenta on cuenta

//para activar el trigger tr_cuenta

enable trigger tr_cuenta on cuenta

//desactivar todos los triger de la tabla cuenta

alter table cuenta disable trigger all

//activar todos los trigger de la tabla cuenta

alter table cuenta enable trigger all

//la siguiente instruccion impide que se ejecuten sentencias drop table y alter table en la base de datos

create trigger tr_seguridad
on database for drop_table,alter_table
  as
   begin
  raiserror('no esta permitido borrar ni modificar tablas!',16,1)
rollback transaction
end

create table xx
(id_xx int not null,
descripcion varchar(50)
primary key(id_xx)
)

drop table xx

create trigger tr_seguridad1
on database for create_table
  as
   begin
  raiserror('no esta permitido crear tablas!',16,1)
rollback transaction
end

create table yy
(id_yy int not null,
descripcion varchar(50)
primary key(id_yy)
)

Espero que les haya encantado he hecho mi mejor esfuerzo para que ustedes queridos amigos puedan aprender algo de lo poco que yo tambien se , y asi podemos compartir ideas ...