Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2005
kejos kejos is offline
Miembro
 
Registrado: dic 2005
Posts: 13
Poder: 0
kejos Va por buen camino
Unhappy procedimiento almacenado

Hola a todos!!!!
es que tengo una qpeueña duda acerca de un procedimiento....
tengo el siguiente procedimeinto alamcenado:
Código:
CREATE procedure spActEx (@nombreexamen nvarchar(50), @puntaje int, 
@fecha smalldatetime, @lee bit, @escribe bit, @habla bit, @docidentidad varchar(30), 
@ididioma int) AS if exists (select [nombreexamen], [puntaje], [fecha], [lee], [escribe], 
[habla], [docidentidad], [ididioma] from [ExamenIdiomas] WHERE 
([docidentidad]=@docidentidad) and ([nombreexamen]=@nombreexamen)) UPDATE 
[ExamenIdiomas] SET [nombreexamen]=@nombreexamen, [puntaje]= @puntaje, 
[fecha]=@fecha, [lee]=@lee, [escribe]=@escribe, [habla]=@habla, [ididioma]=@ididioma 
WHERE (([docidentidad]=@docidentidad) and ([nombreexamen]=@nombreexamen))
que es para hacer una actualizacion el problema es que cuando ejecuto mi aplicación a pesar de que el procedimeitno tiene ambas condiciones tanto en el select como en el update me actualiza todos los registros que tengan esa cédula y no solamente el que necesito que actualice cómo puedo organizar esto
a quien me pueda ayudar se lo agradezco además cómo puedo ejecutar este procedimiento en el analizador de consultas?

gracias
Responder Con Cita
  #2  
Antiguo 01-12-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por kejos
Código SQL [-]
CREATE procedure spActEx (@nombreexamen nvarchar(50), @puntaje int, 
                          @fecha smalldatetime, @lee bit, @escribe bit, 
                          @habla bit, @docidentidad varchar(30), @ididioma int) AS 
  if exists (select 1
              from [ExamenIdiomas] 
             WHERE ([docidentidad]=@docidentidad) and ([nombreexamen]=@nombreexamen)) 
    UPDATE [ExamenIdiomas] 
       SET [nombreexamen]=@nombreexamen, 
           [puntaje]= @puntaje, 
           [fecha]=@fecha, 
           [lee]=@lee, 
           [escribe]=@escribe, 
           [habla]=@habla, 
           [ididioma]=@ididioma 
     WHERE ([docidentidad]=@docidentidad) 
       and [nombreexamen]=@nombreexamen)
Es absurdo el IF, ya que el update esta filtrado por los mismos datos, y Sql Server no da errores (como el NO_DATA_FOUND de Oracle) cuando se hace un update sin que encuentre registros.

Cita:
Empezado por kejos
...a pesar de que el procedimeitno tiene ambas condiciones tanto en el select como en el update me actualiza todos los registros...
Me cuestr creerolo.. ¿Tu aplicación no ejecuta otras sentencias?


Cita:
Empezado por kejos
...cómo puedo ejecutar este procedimiento en el analizador de consultas?...
[sql]
EXECUTE NombreStoreProcedure Parametro1, Parametro2, Parametro3....
[sql]
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 01-12-2005
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
Imposible de Leer... intenta en el futuro darle un poco de formato...

Vamos por partes:

1 - los [] solo utilizálos con nombres de campos con espacio, por ejemplo [pepe el grande], asi es más fácil de leer...
2 - el if no sirve de nada en la sentencia, ya que con solo el update funciona =, imagina que le dices que si existe X lo actualice, pero da igual, porque sino pones el if y ejecutas el update sin la existencia del registro, no actualiza nada.

No entiendo que es lo que lo que quieres decir con: "y no solamente el que necesito que actualice"

Para hacer lo mismo en el Analizador de consulta mira esto:

Código:
  
Declare
 @nombreexamen nvarchar(50),
 @puntaje int, 
 @fecha smalldatetime, 
 @lee bit, 
 @escribe bit, 
 @habla bit, 
 @docidentidad varchar(30), 
 @ididioma int
set @nombreexamen='pepe'
-- aqui los demas set, de las variables
UPDATE ExamenIdiomas 
 SET  nombreexamen=@nombreexamen,
  puntaje= @puntaje, 
  fecha=@fecha, 
  lee=@lee,
  escribe=@escribe, 
  habla=@habla,
  ididioma=@ididioma 
 WHERE docidentidad=@docidentidad and nombreexamen=@nombreexamen
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #4  
Antiguo 02-09-2008
ozegarra ozegarra is offline
Miembro
 
Registrado: nov 2007
Ubicación: Lima - Peru
Posts: 35
Poder: 0
ozegarra Va por buen camino
imposible que te actualice toda la tabla si es que la condicion esta bien. Chekea que no hayas dejado algo al final del procedimiento o estes actualizando por otro lado.
Para ejecutar en el analizador de consultar solo pon el nombre del procedimiento seguido de los parametros separados por comas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:11:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi