PDA

Ver la Versión Completa : procedimiento almacenado


kejos
01-12-2005, 13:16:29
Hola a todos!!!!
es que tengo una qpeueña duda acerca de un procedimiento....
tengo el siguiente procedimeinto alamcenado:
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

delphi.com.ar
01-12-2005, 13:29:34
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.

...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?


...cómo puedo ejecutar este procedimiento en el analizador de consultas?...
[sql]
EXECUTE NombreStoreProcedure Parametro1, Parametro2, Parametro3....
[sql]
Saludos!

Xianto
01-12-2005, 13:35:26
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:


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

ozegarra
02-09-2008, 17:39:22
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.