ayuda transact devjoker
description
Transcript of 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)
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)
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
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
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
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')
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
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
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
GO
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)
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
)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
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
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
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
SET @nerror=-1--set @nerror=@@error
ENDELSE
begininsert into tblalumnos (nalumno,nombre) values
(@nalu,@nombre)set @nerror=@@ERROR
end
END
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
)
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
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
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
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
OTRO EXAMEN