Académique Documents
Professionnel Documents
Culture Documents
http://www.sqlserverya.com.ar/index.php?inicio=125
) Sacar todos los empleados que se dieron de alta entre una determinada fecha inicial
y fecha final y que pertenecen a un determinado departamento.
?
1
@FINICIAL DATETIME,
@FFINAL SMALLDATETIME ,
@DEPT_NO NVARCHAR(10)
AS
?
1
?
1
2
3
4
5
6
@SALARIO INT,
@COMISION INT,
@DEPT_NO INT
10
AS
11
12
(@EMP_NO,
13
@APELLIDO,
14
15
16
17
18
@OFICIO,
@DIR,
@FECHA_ALT,
@SALARIO,
@COMISION,
@DEPT_NO)
19
?
1
?
1
FROM EMP
GROUP BY DEPT_NO
?
1
EXEC NUMEMP_DEPT 30
4) Crear un procedimiento igual que el anterior, pero que recupere tambin las
personas que trabajan en dicho departamento, pasndole como parmetro el nombre.
?
1
2
3
4
FROM EMP AS E
ON E.DEPT_NO = D.DEPT_NO
10
11
, D.DNOMBRE AS [DEPARTAMENTO]
12
, E.APELLIDO, E.SALARIO
13
14
15
16
FROM EMP AS E
INNER JOIN DEPT AS D
ON E.DEPT_NO = D.DEPT_NO
WHERE D.DNOMBRE = @DEPT
?
1
?
1
?
1
6) Igual que el anterior, pero si no le pasamos ningn valor, mostrar los datos de
todos los empleados.
?
1
SELECT OFICIO, SALARIO, COMISION FROM EMP WHERE APELLIDO LIKE @PAPELLIDO
?
1
?
1
SELECT OFICIO, SALARIO, COMISION FROM EMP WHERE APELLIDO LIKE '%' + @PAPELLIDO + '%
?
1
Parte 2
Regresar al ndice
?
1
CREATE PROCEDURE DEPARTAMENTO @DEPT NVARCHAR(30)
2
3
4
5
AS
DECLARE @DEPTDEF NVARCHAR(30)
SET @DEPTDEF = NULL
SELECT @DEPTDEF = DNOMBRE FROM DEPT
IF (@DEPTDEF IS NULL)
ELSE
10
BEGIN
11
12
13
FROM EMP AS E
14
15
16
17
18
?
1
?
1
@VALOR NVARCHAR(30)
AS
5
6
7
8
9
10
11
12
13
14
WHERE T = @VALOR
15
IF (@CONSULTA IS NULL)
16
BEGIN
17
18
19
20
21
22
23
24
25
BEGIN
26
PRINT 'FUNCION'
27
28
,AVG(SALARIO) AS [MEDIA]
29
,COUNT(EMPLEADO_NO) AS [N EMPLEADOS]
30
31
GROUP BY FUNCION
32
33
34
35
36
37
38
39
40
41
SELECT T AS [TURNO]
42
,AVG(SALARIO) AS [MEDIA]
43
,COUNT(EMPLEADO_NO) AS [N EMPLEADOS]
44
45
46
47
48
49
50
51
52
GROUP BY T
HAVING T = @VALOR
SELECT T AS [TURNO]
,EMPLEADO_NO AS [N EMPLEADO]
,APELLIDO, SALARIO
FROM PLANTILLA
WHERE T = @VALOR
END
END
53
ELSE
54
BEGIN
55
PRINT 'SALA'
56
57
,AVG(P.SALARIO) AS [MEDIA]
58
,COUNT(P.EMPLEADO_NO) AS [N EMPLEADOS]
59
60
61
62
63
64
ON S.HOSPITAL_COD = P.HOSPITAL_COD
GROUP BY S.NOMBRE
HAVING S.NOMBRE = @VALOR
SELECT S.NOMBRE AS [SALA]
,P.EMPLEADO_NO AS [N EMPLEADO]
65
66
67
68
,P.APELLIDO, P.SALARIO
FROM PLANTILLA AS P
INNER JOIN SALA AS S
ON S.HOSPITAL_COD = P.HOSPITAL_COD
69
70
71
72
73
END
74
END
75
ELSE
76
BEGIN
77
PRINT 'HOSPITAL'
78
79
80
81
82
83
84
85
ON H.HOSPITAL_COD = P.HOSPITAL_COD
GROUP BY H.NOMBRE
HAVING H.NOMBRE = @VALOR
SELECT H.NOMBRE AS [HOSPITAL]
86
,P.EMPLEADO_NO AS [N EMPLEADO]
87
,P.APELLIDO, P.SALARIO
88
FROM PLANTILLA AS P
89
90
ON H.HOSPITAL_COD = P.HOSPITAL_COD
91
92
END
93
94
95
?
1
?
1
@APE NVARCHAR(30)
AS
5
6
7
8
9
10
11
BEGIN
12
13
,@SUB = B.EMP_NO
14
15
16
17
18
ON A.EMP_NO = B.DIR
WHERE B.DIR = @EMP
ORDER BY B.DIR
IF (@JEFE IS NULL)
BEGIN
19
20
21
22
23
,B.APELLIDO AS [SUBORDINADO]
24
,B.OFICIO
25
,B.DEPT_NO AS [N DEPARTAMENTO]
26
FROM EMP AS A
27
28
ON B.DIR = A.EMP_NO
29
30
ORDER BY B.DIR
31
32
33
34
35
36
37
38
END
ELSE
BEGIN
SELECT A.EMP_NO AS [N DE EMPLEADO]
,A.APELLIDO AS [JEFE], A.OFICIO
,A.DEPT_NO AS [N DEPARTAMENTO]
,B.EMP_NO AS [N EMPLEADO]
,B.APELLIDO AS [SUBORDINADO]
,B.OFICIO
39
40
41
42
43
,B.DEPT_NO AS [N DEPARTAMENTO]
FROM EMP AS A INNER JOIN EMP AS B
ON A.EMP_NO = B.DIR
WHERE B.DIR = @EMP
44
45
46
ORDER BY B.DIR
END
END
47
48
?
1
11) Crear procedimiento que borre un empleado que coincida con los parmetros
indicados (los parmetros sern todos los campos de la tabla empleado).
?
1
@EMP_NO INT,
@APELLIDO NVARCHAR(20),
@OFICIO NVARCHAR(20),
@DIR INT,
5
6
@FECHA_ALT SMALLDATETIME,
@SALARIO INT,
8
9
10
11
12
13
14
15
@COMISION INT,
@DEPT_NO INT
AS
DELETE FROM EMP WHERE EMP_NO = @EMP_NO
AND APELLIDO = @APELLIDO
AND OFICIO = @OFICIO
AND DIR = @DIR
AND FECHA_ALT = @FECHA_ALT
AND SALARIO = @SALARIO
16
17
18
?
1
los datos para eliminarlo son incorrectos, informaremos mostrando los datos reales del
empleado junto con los datos introducidos por el usuario, para que se vea el fallo.
?
1
@EMP_NO INT
,@APELLIDO NVARCHAR(20)
,@OFICIO NVARCHAR(20)
5
6
7
8
9
10
11
,@DIR INT
,@FECHA_ALT SMALLDATETIME
,@SALARIO INT
,@COMISION INT
,@DEPT_NO INT
AS
DECLARE @VALOR NVARCHAR(30)
SELECT @VALOR = EMP_NO
12
13
14
15
16
17
18
19
20
21
22
23
IF (@VALOR IS NULL)
BEGIN
SELECT @VALOR = EMP_NO FROM EMP WHERE EMP_NO = @EMP_NO
IF (@VALOR IS NULL)
BEGIN
24
25
26
END
27
ELSE
28
BEGIN
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
END
61
62
?
1
13) Crear un procedimiento para insertar un empleado de la plantilla del Hospital. Para
poder insertar el empleado realizaremos restricciones:
?
1
@HOSPITAL NVARCHAR(30)
,@SALA NVARCHAR(30)
,@EMPLEADO INT
5
6
7
8
9
10
11
,@APELLIDO NVARCHAR(30)
,@FUNCION NVARCHAR(30)
,@TURNO NVARCHAR(2)
,@SALARIO INT
AS
DECLARE @HOSPITAL2 INT
DECLARE @SALA2 INT
DECLARE @EMPLEADO2 INT
12
13
14
15
16
17
IF (@EMPLEADO2 IS NULL)
18
BEGIN
19
20
21
22
23
24
25
26
DATOS:'
27
28
29
PRINT ''
30
31
32
33
34
35
36
37
WHERE T = @TURNO
38
39
BEGIN
40
41
VLIDOS'
42
43
44
PRINT ''
45
46
47
48
49
50
51
52
53
54
55
END
56
ELSE
57
BEGIN
58
59
60
61
62
63
64
65
66
END
END
ELSE
BEGIN
67
68
CAST(@EMPLEADO AS NVARCHAR(4))
69
70
END
71
72
?
1