SQL Server - Funcion con cursor no muestra resultados

 
Vista:

Funcion con cursor no muestra resultados

Publicado por Angel (2 intervenciones) el 02/05/2017 13:04:01
Buenos días a todos,
llevo varios días en el trabajo tratando de crear una función con un cursor que muestre las cuentas que se han creado en el ultimo mes y que las compruebe con las que son E o B(inactivos o bloqueados), comprobando si corresponden el telefono, movil o email nuevo con las cuentas de estado E o B.
No me da error de sintaxis, pero no me muestra resultados.... He de decir que soy bastante nuevo en sql server.

Cualquier ayuda será bienvenida, gracias de antemano

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
USE [BasedeDatos];
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
 
ALTER FUNCTION [dbo].[Morosos]()
RETURNS @TablaResultante TABLE
(
	CODIGOID uniqueidentifier,
	TELEFONO nvarchar(25),
	MOVIL nvarchar(25),
	CORREO nvarchar (128),
	NOMBRE nvarchar(100),
	ESTATUS nvarchar(1),
	STATUSSINCE DATETIME,
	NOMBRECUENTA nvarchar(50),
	CMP_CODE nvarchar(20)
)
AS
BEGIN
	-- Fill the table variable with the rows for your result set
 
DECLARE
@codigoo uniqueidentifier,
@telefono nvarchar(25),
@movil nvarchar (25),
@correo nvarchar(128),
@nombre nvarchar (100),
@status nvarchar (1),
@statussince DATETIME,
@nombrecuenta nvarchar (50),
@codigo nvarchar(20);
 
 
DECLARE listamorosos CURSOR FOR
SELECT     cicmpy.cmp_code, cicmpy.Status, cicmpy.cmp_name, cicmpy.status_since, cicntp.FullName, cicntp.cnt_f_tel, cicntp.cnt_f_mobile, cicntp.cnt_email, cicntp.cnt_id
FROM         cicmpy WITH (NOLOCK) INNER JOIN
                      cicntp WITH (NOLOCK) ON cicmpy.cnt_id = cicntp.cnt_id
WHERE     (cicmpy.syscreated > GETDATE() - 100) AND (cicntp.cnt_f_tel IS NOT NULL) AND (cicntp.cnt_f_tel IN
                          (SELECT     cicntp_3.cnt_f_tel
                            FROM          cicmpy AS cicmpy_3 WITH (NOLOCK) INNER JOIN
                                                   cicntp AS cicntp_3 WITH (NOLOCK) ON cicmpy_3.cnt_id = cicntp_3.cnt_id
                            WHERE      (cicmpy_3.cmp_status = 'E') OR
                                                   (cicmpy_3.cmp_status = 'B'))) AND (cicntp.cnt_f_mobile IS NOT NULL) AND (cicntp.cnt_f_mobile IN
                          (SELECT     cicntp_2.cnt_f_mobile
                            FROM          cicmpy AS cicmpy_2 WITH (NOLOCK) INNER JOIN
                                                   cicntp AS cicntp_2 WITH (NOLOCK) ON cicmpy_2.cnt_id = cicntp_2.cnt_id
                            WHERE      (cicmpy_2.cmp_status = 'E') OR
                                                   (cicmpy_2.cmp_status = 'B'))) AND (cicntp.cnt_email IS NOT NULL) AND (cicntp.cnt_email NOT LIKE '-@%') AND (cicntp.cnt_email NOT LIKE 'notiene%')
                      AND (cicntp.cnt_email IN
                          (SELECT     cicntp_1.cnt_email
                            FROM          cicmpy AS cicmpy_1 WITH (NOLOCK) INNER JOIN
                                                   cicntp AS cicntp_1 WITH (NOLOCK) ON cicmpy_1.cnt_id = cicntp_1.cnt_id
                            WHERE      (cicmpy_1.cmp_status = 'E') OR
                                                   (cicmpy_1.cmp_status = 'B')))
 
 
	OPEN listamorosos
	FETCH NEXT FROM listamorosos INTO @codigo, @status, @nombre, @statussince, @nombrecuenta, @telefono, @movil, @correo, @codigoo;
	WHILE @@FETCH_STATUS = 0
		BEGIN
			INSERT @TablaResultante
			SELECT @codigo, @status, @nombre, @statussince, @nombrecuenta, @telefono, @movil, @correo, cicmpy.cmp_code FROM cicmpy INNER JOIN cicntp ON cicmpy.cnt_id = cicntp.cnt_id
			WHERE ((cicntp.cnt_f_tel = @telefono OR cicntp.cnt_f_mobile = @movil OR cicntp.cnt_email = @correo)
					 AND (@status = 'E') OR (@status ='B'))
 
			FETCH NEXT FROM listamorosos INTO @codigo, @status, @nombre, @statussince, @nombrecuenta, @telefono, @movil, @correo, @codigoo
 
		END;
 
	CLOSE listamorosos;
 
DEALLOCATE listamorosos;
 
	RETURN
 
END
GO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Funcion con cursor no muestra resultados

Publicado por Isaias (4557 intervenciones) el 02/05/2017 16:46:59
El SELECT que esta llenando el cursor, ¿te da algun resultado?.

No comentas que version-edicion de SQL Server manejas, pero podrias substituir el CURSOR, con alguna tabla temporal.

Tambien substituir el IN, por EXISTS o EXCEPT
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion con cursor no muestra resultados

Publicado por Angel (2 intervenciones) el 02/05/2017 17:23:26
Gracias por contestar tan rápido
Si, el select si que me muestra un resultado.
Manejo el sql server 2008.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Funcion con cursor no muestra resultados

Publicado por Isaias (4557 intervenciones) el 02/05/2017 18:29:09
Podrias explicarme el codigo de tu funcion?

Segun esto, vas a generar una lista de registros, que son introducidos en un cursor, despues abre el cursor y lo colocas en tu tabla de salida, pero no le das ningun tratamiento a los registros, ¿cierto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar