SQL Server - Actualizacion dinamica Procedimiento Almacenado

 
Vista:
Imágen de perfil de Paulo

Actualizacion dinamica Procedimiento Almacenado

Publicado por Paulo (4 intervenciones) el 20/05/2014 16:37:52
Amigos,

Les cuento mi problema: Estoy haciendo un procedimiento el cual tiene que, entre otras cosas, actualizar un campo de la tabla dependiendo de una condicion. Eso funciona bien, pero mi problema es que no tengo idea como actualizar sólo el registro actual. Quiero decir al corroborar si la condición se cumple, el UPDATE me actualiza todas las filas, obviamente sé que en mi código falta la claúsula WHERE pero lo que no sé es como hacer que ese WHERE vaya cambiando a medida que el IF revisa las condicones. Les dejo el código para que le echen un vistazo:

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
ALTER PROCEDURE sp_automatizacion AS
 
BEGIN
 
	--Borramos la tabla
	DELETE FROM DESC_REP_CERR_COPIA;
 
	--Insertamos todos los registros de la tabla DESCARGA_REPARACIONES_CERRADAS en la tabla DESC_REP_CERR_COPIA
	INSERT INTO [dbo].[DESC_REP_CERR_COPIA] ([PS], [FECHA_RECEPCION], [FECHA_CIERRE_TECNICO], [AREA_DDD], [TELEFONO], [ULTIMO_TECNICO], [CLCLA_MOD], [CLCAUS_MOD], [SEGMENTO], [FECHA_PLAZO], [FECHA_CITA_DESDE], [FECHA_CITA_HASTA], [REPETIDO], [REPEINS], [FECHA_DESPACHO_TAC], [COD_AGENCIA], [EDIFICIO], [TIPO_RECLAMO], [SUBTIPO_RECLAMO], [CLAVE_RECEPCION], [USUARIO_RECEPCION], [USUARIO_CIERRE], [RECEPCION_ANTERIOR], [CANCELACION_ANTERIOR], [CAUSA_ANTERIOR], [TECNICO_ANTERIOR], [COD_SEGMENTO], [EMPRESA_ACTUAL], [EMPREA_ANTERIOR], [PS_ANTERIOR], [CLASIFICACION], [SISTEMA], [TAC_INS], [REPEMP], [ID_COD], [AGENCIA], [PETICION], [CABLE], [PAR], [DIRECCION], [AMM], [AMA], [CLAVE_ORIGINAL], [FECHA_ENTRADA_SISTEMA], [USUARIO_DESCARGA], [NOTAS], [NUM_FACT], [FECHA_CIERRE_MAT], [USUARIO_CIERRE_MAT], [VALIDADO], [ENTREGADO], [REPUESTO], [asignador], [NUM_GUIA_DEVOLUCION])SELECT * FROM [dbo].[DESCARGA_REPARACIONES_CERRADAS];
 
	--Actualizamos los campos de Fecha para seccionar la misma
	UPDATE DESC_REP_CERR_COPIA SET DIA = CONVERT(INT,DAY(FECHA_CIERRE_TECNICO)),
	MES = CONVERT(INT,MONTH(FECHA_CIERRE_TECNICO)), ANIO = CONVERT(INT,YEAR(FECHA_CIERRE_TECNICO)),
	ATRASO = CONVERT(INT,GETDATE()-FECHA_CIERRE_TECNICO); --GetDate() trae la fecha actual, ATRASO es para ver los días fuera de plazo de los técnicos
 
	--Declaramos una variable y le asignamos un valor de la tabla
	DECLARE @NUM_FACT VARCHAR(25)
	DECLARE @MATER VARCHAR(3)
	DECLARE @ID VARCHAR(15)
	SELECT @NUM_FACT = NUM_FACT FROM DESC_REP_CERR_COPIA;
	SELECT @MATER = (SELECT COUNT(*) AS MATERUALES FROM PROPUESTA_CIERRE_REPARACIONES prop, DESCARGA_REPARACIONES_CERRADAS desca WHERE prop.CLAVE = desca.CLCLA_MOD);
	SELECT @ID = ID_COD FROM DESC_REP_CERR_COPIA;
 
	DECLARE c_actualizacion CURSOR FOR
	SELECT NUM_FACT, ID_COD FROM DESC_REP_CERR_COPIA
	WHERE ID_COD <> 0 OR ID_COD <> NULL OR ID_COD <> ''
	AND
	NUM_FACT <> 0 OR NUM_FACT <> NULL OR ID_COD <> '';
 
	OPEN c_actualizacion;
		FETCH NEXT FROM c_actualizacion INTO @NUM_FACT, @ID;
 
	WHILE(@@FETCH_STATUS = 0)
		BEGIN
			--Validamos si el campo NUM_FACT es nulo o no.
			IF((@NUM_FACT <> '') OR (@NUM_FACT <> NULL))
				BEGIN
					UPDATE DESC_REP_CERR_COPIA SET DEPENDENCIA_NUM_FACT = 1 WHERE ID_COD = @ID;
					--UPDATE DESC_REP_CERR_COPIA SET DEPENDENCIA_NUM_FACT = 1;
					FETCH NEXT FROM c_actualizacion INTO @NUM_FACT, @ID;
				END
			ELSE
				BEGIN
					UPDATE DESC_REP_CERR_COPIA SET DEPENDENCIA_NUM_FACT = 0 WHERE ID_COD = @ID;
					--UPDATE DESC_REP_CERR_COPIA SET DEPENDENCIA_NUM_FACT = 0;
					FETCH NEXT FROM c_actualizacion INTO @NUM_FACT, @ID;
				END
 
			IF(@MATER <> 0)
				BEGIN
					UPDATE DESC_REP_CERR_COPIA SET LLEVA_MATER = 'SI';
				END
			ELSE
				BEGIN
					UPDATE DESC_REP_CERR_COPIA SET LLEVA_MATER = 'NO';
				END
	END
 
	CLOSE c_actualizacion
 
	DEALLOCATE c_actualizacion
END

Ojalá puedan orientarme.

Saludos desde Chile
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

Actualizacion dinamica Procedimiento Almacenado

Publicado por Isaias (4558 intervenciones) el 20/05/2014 20:14:59
Amigo, ya habias posteado esta duda y te di algunas recomendaciones, no es correcto volver a abrir un post con la misma duda.

te dije que la comparación campo <> null

NO ES CORRECTA, debe ser (campo isnull) = 1
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