ayuda transact devjoker

27
--bd,banco: procedimientos almacenados TRASPASO set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[traspaso] ( @ccsacar int, @ccmeter int, @cantidad int ) AS BEGIN SELECT * FROM tblcuentascorrientes UPDATE tblcuentascorrientes set saldo=saldo-@cantidad WHERE cc=@ccsacar UPDATE tblcuentascorrientes set saldo=saldo+@cantidad WHERE cc=@ccmeter SELECT * FROM tblcuentascorrientes END TRASPASO1 A set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[traspaso1a] (@ccsacar int, @ccmeter int, @cantidad int, @saldoactual int )

Upload: kai69

Post on 14-Jun-2015

245 views

Category:

Documents


6 download

DESCRIPTION

dev

TRANSCRIPT

Page 1: ayuda transact devjoker

--bd,banco: procedimientos almacenados

TRASPASOset ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[traspaso]

(@ccsacar int,@ccmeter int,@cantidad int)

AS BEGIN

SELECT * FROM tblcuentascorrientes

UPDATE tblcuentascorrientes set saldo=saldo-@cantidad WHERE cc=@ccsacar

UPDATE tblcuentascorrientes set saldo=saldo+@cantidad WHERE cc=@ccmeter

SELECT * FROM tblcuentascorrientes

END

TRASPASO1 A

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO

ALTER PROCEDURE [dbo].[traspaso1a](@ccsacar int,@ccmeter int,@cantidad int,@saldoactual int)

Page 2: ayuda transact devjoker

ASBEGIN

IF EXISTS (SELECT * FROM tblcuentascorrientes WHERE cc=@ccsacar)BEGIN

SELECT @saldoactual=saldo FROM tblcuentascorrientes WHERE cc=@ccsacar

IF @saldoactual>@cantidadIF EXISTS (SELECT * FROM tblcuentascorrientes

WHERE cc=@ccmeter)BEGIN

UPDATE tblcuentascorrientes SET saldo=saldo-@cantidad WHERE cc=@ccsacar

UPDATE tblcuentascorrientes SET saldo=saldo+@cantidad WHERE cc=@ccmeter

SELECT * FROM tblcuentascorrientesEND

ELSESELECT 'la cuenta de destino no existe'

ELSE SELECT 'El saldo de la cuenta no es suficiente'

END

ELSESELECT 'la cuenta de origen no existe'

SELECT * FROM tblcuentascorrientesEND

TRASPASO 1B

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO

ALTER PROCEDURE [dbo].[traspaso1b] @ccsacar int,@ccmeter int,@cantidad decimal(10,2)

ASBEGINDECLARE @saldo int BEGIN TRAN

BEGIN TRYUPDATE tblcuentascorrientes SET saldo=saldo-@cantidad WHERE

cc=@ccsacarIF @@ROWCOUNT=0

RAISERROR(' LA CUENTA ORIGEN NO EXISTE',16,1)

Page 3: ayuda transact devjoker

SET @saldo=(SELECT saldo FROM tblcuentascorrientes WHERE cc=@ccsacar)

IF @saldo<0RAISERROR ('EL SALDO DE LA CUENTA ES

INSUFICIENTE',16,1)UPDATE tblcuentascorrientes SET saldo=saldo+@cantidad WHERE

cc=@ccmeterIF @@ROWCOUNT=0

RAISERROR ('LA CUENTA DESTINO NO EXISTE',16,1) COMMIT TRAN

END TRY BEGIN CATCH

ROLLBACK TRANPRINT ERROR_MESSAGE()

END CATCH

SELECT * FROM tblcuentascorrientesEND

Page 4: ayuda transact devjoker

TRASPASO 2

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[traspaso2] @ccsacar int,@ccmeter int,@cantidad decimal(10,2)

ASBEGINDECLARE @saldo int

--grabo cualquier movimientoINSERT INTO tblcontroltraspaso (CCORIGEN,CCDESTINO,IMPORTE,FECHAHORA) VALUES (@ccsacar,@ccmeter,@cantidad,getdate())

--comienzo de la transaccionBEGIN TRAN

BEGIN TRYUPDATE tblcuentascorrientes SET saldo=saldo-@cantidad WHERE

cc=@ccsacarIF @@ROWCOUNT=0

RAISERROR(' LA CUENTA ORIGEN NO EXISTE',16,1)

SET @saldo=(SELECT saldo FROM tblcuentascorrientes WHERE cc=@ccsacar)

IF @saldo<0RAISERROR ('EL SALDO DE LA CUENTA ES

INSUFICIENTE',16,1)UPDATE tblcuentascorrientes SET saldo=saldo+@cantidad WHERE

cc=@ccmeterIF @@ROWCOUNT=0

RAISERROR ('LA CUENTA DESTINO NO EXISTE',16,1)

--si ha llegado aquí es que todo va bien-- grabo en tblmovimientos

COMMIT TRAN END TRY BEGIN CATCH

ROLLBACK TRANPRINT ERROR_MESSAGE()

insert into tbltraspasoerroneos (ccorigen,ccdestino,importe,texterror) values (@ccsacar,@ccmeter,@cantidad,error_message())

END CATCH

SELECT * FROM tbltraspasoerroneosSELECT * FROM tblmovimientosSELECT * FROM tblcuentascorrientes

END

Page 5: ayuda transact devjoker

BD3SQL

--EJ3WHILEASCII

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[ej3WHILEascii]AS

BEGIN

DECLARE @N int set @N=10while (@N<255)begin

select @N as N,char(@N)as Caracterset @N=@N-1

endEND---------------------------

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[ej5whiledeletrea]AS BEGIN

DECLARE@Posicion int,@C varchar(20),@cadena varchar(20)

SET NOCOUNT ONSET @posicion=1SET @cadena='salamanca'while @posicion<=datalength(@cadena) BEGIN

set @c=substring(@cadena,@posicion,1)SELECT @C,ASCII(@C)SET @posicion=@posicion+1END

END

set ANSI_NULLS ON

Page 6: ayuda transact devjoker

set QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[error]

ASBEGIN TRY

DECLARE @divisor int ,

@dividendo int,

@resultado int

SET @dividendo = 100

SET @divisor = 0

-- Esta linea provoca un error de division por 0 SET @resultado = @dividendo/@divisor PRINT 'No hay error' END TRY BEGIN CATCH PRINT 'Se ha producido un error' END CATCH

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[pisoentredosvalores]@VALOR1 INT,@VALOR2 INT

AS

BEGIN select *from tbltienepisoenwhere valor>=@valor1 and valor<=@valor2end

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_3]@valor int,@id int

AS BEGIN IF EXISTS (SELECT * FROM tbltienepisoen WHERE id=@id)UPDATE valor SET valor=@valor WHERE id=@idELSE select ('el valor no se ha actualizado')

Page 7: ayuda transact devjoker

END

4 5 Y 6 DEBAJO

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_4]@codciudad int,@incremento int

ASBEGIN

IF exists (SELECT * FROM tbltienepisoen WHERE codciudad=@codciudad)BEGIN SELECT * FROM tbltienepisoen WHERE codciudad=@codciudadUPDATE tbltienepisoen SET VALOR=valor+@incremento WHERE

codciudad=@codciudadSELECT * FROM tbltienepisoen WHERE codciudad=@codciudad

END

ELSESELECT ('el codigo introducido no existe')

END

Page 8: ayuda transact devjoker

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_6error]@CC int

AS BEGIN

BEGIN TRYDELETE FROM tblciudad WHERE codciudad=@cc;DELETE FROM tbltienepisoen WHERE codciudad=@cc;

END TRYBEGIN CATCH

EXEC error

SELECTERROR_NUMBER() AS ErrorNumber,ERROR_SEVERITY() AS ErrorSeverity,ERROR_STATE() AS ErrorState,ERROR_PROCEDURE() AS ErrorProcedure,ERROR_LINE() AS ErrorLine,ERROR_MESSAGE() AS ErrorMessage;

END CATCH

END

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_ej1IF]AS BEGIN

DECLARE @npisos int

SELECT @npisos=count(*)FROM tbltienepisoenWHERE codciudad=37

IF @npisos<5SELECT @npisos, 'hay menos de 5'ELSESELECT @npisos, 'mas de 5'

END

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_ej2while10]AS BEGIN

Page 9: ayuda transact devjoker

DECLARE @N INT SET @N=1WHILE(@N<=10)

BEGIN SELECT 'ESTAMOS EN:'+cast(@N as char(2))SET @N=@N+1

ENDEND

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_ej4whilecreatblascii]ASBEGIN

IF NOT EXISTS (SELECT * from sys objects where name='TBLASCII')BEGIN

Create table tblASCII(Numero int,caracter char(1))

SET NOCOUNT ONDECLARE @N intset @N=1while @N<=255BEGIN

insert into tblASCII VALUES (@N, char(@N))set @n=@n+1

end

end

END

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER procedure [dbo].[sp_p21]@DNI INT,@CODCIUDAD INT,@VALOR INT

ASBEGIN

DECLARE @nerror int;insert into tbltienepisoen VALUES (@DNI,@CODCIUDAD,@VALOR);SET @nerror= @nerror;IF @nerror<>0

SELECT @nerror as ErrorDetectadoELSE

SELECT @@identity as UltimoGrabadoEND

set ANSI_NULLS ONset QUOTED_IDENTIFIER ON

Page 10: ayuda transact devjoker

GO

Page 11: ayuda transact devjoker

ALTER PROCEDURE [dbo].[SUMA]@A int,@B int,@C int output

AS BEGINSET @C=@A+@B

END-----------------------------hasta aqui son procedimiento almacenados de bd3sql

--funciones bd3sql con valores de tabla

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO

ALTER FUNCTION [dbo].[fn_pisosencodciudad](

@codciudad int)RETURNS TABLE ASRETURN (

SELECT * FROM tbltienepisoen WHERE codciudad=@codciudad)

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[fn_tienepiso]()RETURNS TABLE ASRETURN (

SELECT DISTINCT tbltienepisoen.dni,nombre FROM tbltienepisoen INNER JOIN tblnombres ON (tbltienepisoen.dni=tblnombres.dni))

-------Funciones con valores escalares

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[fn_calcula]

(@valor1 int,@valor2 int,@operador varchar)

RETURNS varchar(40)

Page 12: ayuda transact devjoker

ASBEGIN

declare @resultado int set @resultado=(CASE @operador

WHEN '+' THEN @valor1+@valor2WHEN '-' THEN @valor1-@valor2WHEN '*' THEN @valor1*@valor2WHEN '/' THEN @valor1/@valor2

END)return convert (varchar(10),@valor1)

+@operador+convert(varchar(10),@valor2) + '=' + convert (varchar(20),@resultado)

END

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[fn_primeramayuscula](@cadena varchar(255))

RETURNS VARCHAR(255)ASBEGIN

DECLARE @POS INT,@RESULTADO VARCHAR

SET @CADENA=LTRIM(@CADENA)

IF @CADENA IS NULLSET @resultado='????'

ELSE begin set @resultado=UPPER(substring(@CADENA,1,1));set @pos=2while @pos<=LEN(@CADENA)

beginset

@resultado=@resultado+LOWER(substring(@CADENA,@pos,1));set @pos=@pos+1;

end

end

return @resultadoEND

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO ALTER FUNCTION [dbo].[fn_saldo]

( @id int

Page 13: ayuda transact devjoker

)RETURNS decimal(18,2)AS

BEGINDECLARE @saldo decimalSELECT @saldo=valor from tbltienepisoen where id=@idreturn @SALDO

END

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[fn_suma]

(@a int,@b int)

RETURNS int

AS BEGIN

RETURN@a+@b

END

BDEJEMPLOS

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[ej5whiledeletrea]AS BEGIN

DECLARE@Posicion int,@cadena char(10)

SET NOCOUNT ONSET @posicion=1SET @cadena='salamanca'while @posicion<=datalength(@cadena) BEGIN

set @cadena=substring(@cadena,@posicion,1)SELECT @Cadena,ASCII(@Cadena)SET @posicion=@posicion+1END

END

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_ej1IF]AS BEGIN

DECLARE @npisos int

SELECT @npisos=count(*)FROM tbltienepisoenWHERE codciudad=37

Page 14: ayuda transact devjoker

IF @npisos<5SELECT @npisos, 'hay menos de 5'ELSESELECT @npisos, 'mas de 5'

END

ALTER PROCEDURE [dbo].[Suma]

ASBEGIN

DECLARE @N1 INT,@N2 INT

SET @N1=1;SET @N2=2;SELECT @N1,@N2,@N1+@N2

END

ALTER PROCEDURE [dbo].[Sumacp2](@N1 INT, @N2 INT)

ASBEGIN

SELECT @N1,@N2,@N1+@N2

END

Triggers

Page 15: ayuda transact devjoker

Desencadenador tblclientes

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[activaDesactiva]ON [dbo].[tblClientes]after update AS BEGIN

if update(activo)insert into tblhistoricoclientes (idcliente,estado,fecha)

select idcliente,activo,getdate()from deleted

END

Tblhistorico clientes

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[Historicocliente1en1]

ON [dbo].[tblHistoricoClientes]AFTER delete

ASBEGIN

declare @nr intSELECT @nr=count(*)from deleted

if(@nr>1)begin

raiserror('solo se puede borrar uno',16,1)rollback tran

end

END

Page 16: ayuda transact devjoker

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO

ALTER TRIGGER [dbo].[soloClientesActivos] ON [dbo].[tblPedidos] AFTER insert,updateAS BEGIN

DECLARE @estado bitSELECT @estado=activoFROM TBLCLIENTES INNER JOIN INSERTED ON

TBLCLIENTES.IDcliente=INSERTED.IDcliente

if (@estado='false')begin

select ('el cliente esta desactivado')rollback tran

end

-- Insert statements for trigger here

END

Bdexamen pasao

INSERTAR ALUM MODO 1set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[sp_insertAlu]@nalu int,@nombre char(20),@nerror int output

ASBEGIN

SET @NERROR=0IF EXISTS (SELECT * FROM tblAlumnos WHERE Nalumno=@nalu)

BEGIN

Page 17: ayuda transact devjoker

SET @nerror=-1--set @nerror=@@error

ENDELSE

begininsert into tblalumnos (nalumno,nombre) values

(@nalu,@nombre)set @nerror=@@ERROR

end

END

Page 18: ayuda transact devjoker

INSERTAR ALUMNO MOD 2

ALTER PROCEDURE [dbo].[sp_InsertaAlu]

@Nalumno int,@Nombre char(20),@ERROR INT OUTPUT

ASBEGIN

SELECT * FROM TBLALUMNOSBEGIN TRAN

BEGIN TRYIF NOT EXISTS ( SELECT * FROM TBLALUMNOS WHERE NALUMNO=@NALUMNO)

INSERT INTO TBLALUMNOS (NALUMNO,NOMBRE) VALUES (@NALUMNO,@NOMBRE)

ELSEBEGINSET @ERROR=-1RAISERROR ('EL ALUMNO YA EXISTE', 16 ,1) END

SELECT * FROM TBLALUMNOSSELECT @ERROR

COMMIT TRAN

END TRYBEGIN CATCH

ROLLBACK TRANSACTION SELECT ERROR_MESSAGE()

END CATCH

END

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER function [dbo].[fn_faltas](@mes int,@idmodulo int)RETURNS tableasreturn(

SELECT nombre,faltasFROM TBLALUMNOS inner join (

SELECT SUM(NFALTAS)as faltas,nalumnoFROM TBLFALTASWHERE @mes=month(fecha) and @idmodulo=idmoduloGROUP BY nalumno)as auxon tblalumnos.nalumno=aux.nalumno

)

Page 19: ayuda transact devjoker

INSERTAR NOTA

ALTER PROCEDURE [dbo].[sp_InsertaNota]

@Nalumno int,@IDModulo int,@Nota int

ASBEGIN

SELECT * FROM tblNotasBEGIN TRAN

BEGIN TRYIF EXISTS ( SELECT * FROM TBLALUMNOS WHERE NALUMNO=@NALUMNO)

BEGINIF EXISTS (SELECT * FROM TBLMODULOS WHERE

IDModulo=@IDModulo) BEGIN

IF @Nota>=0 AND @Nota<=10BEGIN

INSERT INTO tblNotas (NALUMNO,IDModulo, Nota) VALUES (@NALUMNO,@IDModulo, @Nota)

SELECT ' SE HA INTRODUCIDO UNA NOTA CORRECTAMENTE'

ENDELSE

RAISERROR(' LA NOTA NO ES VALIDA', 16, 1)

ENDELSE

RAISERROR(' EL ID DEL MODULO NO ES CORRECTO', 16, 1)

ENDELSE

RAISERROR ('EL ALUMNO NO EXISTE', 16 ,1)

SELECT * FROM tblNotasCOMMIT TRAN

END TRYBEGIN CATCH

ROLLBACK TRANSACTION SELECT ERROR_MESSAGE()

END CATCH

END

Page 20: ayuda transact devjoker

INSERTAR FALTA

ALTER PROCEDURE [dbo].[sp_insertaFalta]

@Nalumno int,@IdModulo int,@Fecha datetime,@NFaltas int,@ultimograbado int output

ASBEGIN

BEGIN TRYIF EXISTS(SELECT * FROM TBLFALTAS WHERE NALUMNO=@NALUMNO

AND IDMODULO=@IDMODULO AND FECHA=@FECHA) BEGIN

SET @ULTIMOGRABADO=-1RAISERROR ('YA SE HA GRABADO ESTA FECHA',16,1)

ENDIF (@IDMODULO=3 OR @IDMODULO=4) AND @NFALTAS<>1 BEGIN

SET @ULTIMOGRABADO=-2RAISERROR ('YA SE HA GRABADO EN FOL O RETRA' ,16,1)

ENDINSERT INTO TBLFALTAS VALUES

(@NALUMNO,@IDMODULO,@FECHA,@NFALTAS)IF @@ERROR<>0 BEGIN

SET @ULTIMOGRABADO=-3RAISERROR('OCURRIO CUALQUIER OTRO ERROR',16,1)

END ELSEBEGIN

SET @ULTIMOGRABADO=@@IDENTITYRETURN @ULTIMOGRABADO

END

END TRYBEGIN CATCH

SELECT ERROR_MESSAGE() END CATCH

END

Page 21: ayuda transact devjoker

ejercicico 5

FUNCION FALTAS

ALTER FUNCTION [dbo].[fn_Faltas](

@mes int,@codmod int

)RETURNS TABLE ASRETURN (

SELECT Nombre, Faltas FROM tblAlumnos INNER JOIN

(SELECT SUM(NFALTAS) AS FALTAS, NAlumnoFROM tblFaltasWHERE @MES=MONTH(FECHA) AND @CODMOD=IDModuloGROUP BY NALUMNO) AS AUXON tblAlumnos.NAlumno=AUX.NAlumno

)

Desencadenadores

EJERCICIO 6 EXAMENset ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO--ejercicio 6 del examen

ALTER TRIGGER [dbo].[HISTORICOALUMNOS]ON [dbo].[tblalumnos]AFTER UPDATE,DELETE ASBEGIN

INSERT INTO tblhistoricoalumnos SELECT Nalumno,getdate() FROM DELETED

END

Page 22: ayuda transact devjoker

EJERCICIO 6 BIS EXAMENset ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[HISTORICOALUMNOS2]ON [dbo].[tblalumnos]AFTER UPDATE,DELETE ASBEGIN

IF NOT EXISTS(SELECT * FROM INSERTED)--si es DELETEINSERT INTO tblhistoricoalumnos2

SELECT NALUMNO,NOMBRE,'BORRADO',GETDATE()FROM DELETED

--Si es UPDATEIF EXISTS(SELECT * FROM INSERTED)AND EXISTS(SELECT * FROM

DELETED)INSERT INTO tblhistoricoalumnos2

SELECT inserted.NALUMNO,deleted.NOMBRE, inserted.nombre,GETDATE()

FROM deleted inner join inserted ON deleted.Nalumno=inserted.nalumnoEND

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO--ejercicio 7 del examenALTER TRIGGER [dbo].[imposiblecambiarnotas]ON [dbo].[tblnotas]AFTER UPDATE,DELETE ASBEGIN

RAISERROR ('No se permite la modificacion de notas',-5,1)ROLLBACK TRANSACTION

END

Page 23: ayuda transact devjoker

OTRO EXAMEN

Page 24: ayuda transact devjoker
Page 25: ayuda transact devjoker
Page 26: ayuda transact devjoker
Page 27: ayuda transact devjoker