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 11-01-2006
kejos kejos is offline
Miembro
 
Registrado: dic 2005
Posts: 13
Poder: 0
kejos Va por buen camino
Talking problemilla con procedimiento almacenado

hola a todos!!!!
tengo un pequeño problemilla con un procedimiento almacenado....
mi procedimiento es de inserción y es el siguiente:

Código SQL [-]
 
CREATE procedure spActHist (@docidentidad varchar(30),
                            @fechaincon datetime,
                            @fechafincon datetime,
                            @idtipocontrato int, @idtipovincu int) AS
  if not exists (select [idtipocontrato], [idtipovincu]
                   from Historico
                  where [docidentidad]=@docidentidad)
    insert into [Historico]
       ([docidentidad], [fechaincon], [fechafincon], [idtipocontrato], [idtipovincu])
    values
       (@docidentidad, @fechaincon, @fechafincon, @idtipocontrato, @idtipovincu)

pero cuando voy a la ejecución de mi programa no me funciona y cuando le quito el if not exists hay si me inserta entonces no entiendo el porque de esto y básicamente lo que necesito es que me inserte siempre y cuando esos 2 valores que estan en el select del if not exists no sean iguales a los que entro entonces estoy algo confundida con esto a quien me pueda ayudar se lo agradezco....


Última edición por delphi.com.ar fecha: 11-01-2006 a las 16:08:35. Razón: Agregué la etiquete SQL e identé el código
Responder Con Cita
  #2  
Antiguo 11-01-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Usa los Tag para que el código sea mas legible, no sé si es obligatorio usar los begin end cuando pones un if, yo siempre los utilizo, te recomiendo encarecidamente que veas los Book on Line de SQL Server, casi todo está allí, tiene muy buenos ejemplos y muy bien explicados.

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #3  
Antiguo 11-01-2006
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: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por kejos
pero cuando voy a la ejecución de mi programa no me funciona y cuando le quito el if not exists hay si me inserta entonces no entiendo el porque de esto y básicamente lo que necesito es que me inserte siempre y cuando esos 2 valores que estan en el select del if not exists no sean iguales a los que entro entonces estoy algo confundida con esto a quien me pueda ayudar se lo agradezco....
Por favor.. un signo de puntuación!.. tu enunciado es incomprensible (al menos para mi )
El código del store no es demasiado complejo como para ver que es lo que hace,
¿Que pasas si ejecutas el store desde la consola (QueryAnalyzer)?... ¿Estas segura que los datos tienen lo que crees que tiene?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 11-01-2006
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
Cita:
Empezado por kejos
pero cuando voy a la ejecución de mi programa no me funciona y cuando le quito el if not exists hay si me inserta entonces no entiendo el porque de esto y básicamente lo que necesito es que me inserte siempre y cuando esos 2 valores que estan en el select del if not exists no sean iguales a los que entro entonces estoy algo confundida con esto a quien me pueda ayudar se lo agradezco....
Dios, juro que tampoco lo entiendo !

Intenta explicarte un poco mejor...
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #5  
Antiguo 13-01-2006
[pepon386] pepon386 is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Valencia
Posts: 68
Poder: 20
pepon386 Va por buen camino
Prueba a hacerlo de la siguiente manera (no lo he probado, así que a lo mejor hay algún error de sintaxis):

Código SQL [-]
 
CREATE procedure spActHist (@docidentidad varchar(30),
@fechaincon datetime,
@fechafincon datetime,
@idtipocontrato int, @idtipovincu int),
@EXISTE int AS
select Count(*) as @EXISTE
from Historico
where [docidentidad]=@docidentidad
if (@Existe = 0) then
begin
insert into [Historico]
([docidentidad], [fechaincon], [fechafincon], [idtipocontrato], [idtipovincu])
values
(@docidentidad, @fechaincon, @fechafincon, @idtipocontrato, @idtipovincu)
end
Responder Con Cita
  #6  
Antiguo 13-01-2006
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: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por pepon386
Prueba a hacerlo de la siguiente manera (no lo he probado, así que a lo mejor hay algún error de sintaxis):

Código SQL [-]
 
CREATE procedure spActHist (@docidentidad varchar(30),
@fechaincon datetime,
@fechafincon datetime,
@idtipocontrato int, @idtipovincu int),
@EXISTE int AS
select Count(*) as @EXISTE
from Historico
where [docidentidad]=@docidentidad
if (@Existe = 0) then
begin
insert into [Historico]
([docidentidad], [fechaincon], [fechafincon], [idtipocontrato], [idtipovincu])
values
(@docidentidad, @fechaincon, @fechafincon, @idtipocontrato, @idtipovincu)
end
¿Es válido "select Count(*) as @EXISTE"?
Igualmente no recomiendo hacer un Count para saber si hay como mínimo un registro, simplemente porque el count se ejecuta completo, si la tabla es algo grande, imagínesen!

Viendo nuevamente la pregunta de kejos, puedo suponer, que exita una UK o PK compuesta en la tabla históricos, y supongo nuevamente que comete el error en el exists solo filtrando por uno de los campos:
Código SQL [-]
CREATE procedure spActHist (@docidentidad varchar(30),
                            @fechaincon datetime,
                            @fechafincon datetime,
                            @idtipocontrato int, @idtipovincu int) AS
  if not exists (select 1
                   from Historico
                  where [docidentidad]=@docidentidad
                     and [idtipocontrato] = @idtipocontrato 
                     and [idtipovincu] = @idtipovincu)
    insert into [Historico]
       ([docidentidad], [fechaincon], [fechafincon], [idtipocontrato], [idtipovincu])
    values
       (@docidentidad, @fechaincon, @fechafincon, @idtipocontrato, @idtipovincu)

Kejos sería bueno que des alguna señal!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 13-01-2006
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
Bueno, yo diria que en vez de: select 1 from Historico

Debería ser: select top 1 * from Historico

Y lo de: select Count(*) as @EXISTE from...

No funcionaria, que el as es para el nombre del campo de salida...

Debería ser: select @EXISTE=Count(*) from...

Pero igualmente estoy de acuerdo con Federico, sobre como hacerlo.
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #8  
Antiguo 13-01-2006
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
¿Y si lo intentas asi?

Cita:
Empezado por kejos
hola a todos!!!!
Código SQL [-]
 
CREATE procedure [spActHist]
@docidentidad varchar(30),
@fechaincon datetime,
@fechafincon datetime,
@idtipocontrato int,
@idtipovincu int
AS
if not exists (select 1 from Historico
                  where docidentidad = @docidentidad)
     begin
          insert into Historico (docidentidad, fechaincon, fechafincon, idtipocontrato, idtipovincu)
values (@docidentidad, @fechaincon, @fechafincon, @idtipocontrato, @idtipovincu)
Si puedes volver a detallar te podremos ayudar mejor.


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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Procedimiento almacenado LucianoRey MS SQL Server 2 23-08-2005 00:37:06
Crear secuencia numerica con un procedimiento almacenado DobleSiete SQL 9 15-04-2005 22:28:25
confirmar transaccion en un procedimiento almacenado karocs SQL 3 09-08-2004 18:49:24
Ayuda sobre un Procedimiento Almacenado Nuria Firebird e Interbase 6 21-01-2004 13:18:15
Procedimiento almacenado - BDE Ricardo Alfredo Conexión con bases de datos 1 16-06-2003 21:31:34


La franja horaria es GMT +2. Ahora son las 14:34:04.


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