Operaciones basicas en SQL

27/11/2004 - 01:11 por El foxero | Informe spam
Hola, de nuevo, yo aqui aprendiendo SQL. Pregunte sobre hacer todo en SP
el otro dia y la verdad que me convencieron las respuestas y decidi hacer
todo en SP hasta las operaciones basicas de insertar, borrar y actualizar
nombrando los sp's con una notacion facil de recordar respecto al nombre de
la tabla.

Hasta ahi bien pero, trabajando con Visual Foxpro pienso hacer una libreria
de clases para un poco generalizar el proceso. y ahi me vienen las dudas.
Para salvar un registro que tengo en pantalla debo primero buscarlo para
saber si no existe para luego hacer un insert pero si existe hacer un
update. La primera pregunta es, tendria que tener entonces 3 SP's para esto
es decir un SP para buscar la clave otro SP para insertarlo y otro SP para
actualizarlo ??????!!!!! Es eso correcto ?

Otra pregunta es para saber si una clave existe en una tabla de SQL, solo se
puede haciendo un SELECT y retornando el registro ? o hay otra forma ?

Muchas gracias

Raul

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
27/11/2004 - 01:16 | Informe spam
"El foxero" wrote in message
news:
Para salvar un registro que tengo en pantalla debo primero buscarlo para
saber si no existe para luego hacer un insert pero si existe hacer un
update.



La respuesta es: No.

En un sistema de base de datos como SQL (lo mismo pasa con Oracle, DB2,
Informix...) el control de consistencia de datos es tarea del motor
relacional y se hace mediante transacciones. Lo que haces es siempre
insertar y atrapar una excepción si el motor te responde que no pudo
insertar debido a X problema (e.g. una clave primaria duplicada).

Es decir, la lógica usada *no* es "busco si el dato no existe y si no
existe, lo inserto"... lo que se hace es "inserto y veo si todo salió ok".
En T-SQL es algo así:

INSERT ...
IF @@ERROR <> 0


Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
Respuesta Responder a este mensaje
#2 El foxero
27/11/2004 - 01:35 | Informe spam
Es decir, la lógica usada *no* es "busco si el dato no existe y si no
existe, lo inserto"... lo que se hace es "inserto y veo si todo salió ok".
En T-SQL es algo así:

INSERT ...
IF @@ERROR <> 0




Gracias por la respuesta pero... entonces para el caso de la actualización,
como sé cuando utilizar UPDATE para reemplazar valores de campos que no son
la clave primaria ????, no tendria que buscar el registro primero ?
Respuesta Responder a este mensaje
#3 Gustavo Larriera [MVP]
27/11/2004 - 01:45 | Informe spam
"El foxero" wrote in message
news:
Es decir, la lógica usada *no* es "busco si el dato no existe y si no
existe, lo inserto"... lo que se hace es "inserto y veo si todo salió
ok".
En T-SQL es algo así:

INSERT ...
IF @@ERROR <> 0




Gracias por la respuesta pero... entonces para el caso de la
actualización,
como sé cuando utilizar UPDATE para reemplazar valores de campos que no
son
la clave primaria ????, no tendria que buscar el registro primero ?




No sé bien cómo es el caso de uso del formulario que le muestras al usuario.
Supongo que si deseas que desde el mismo lugar el usuario agregue uno nuevo
o modifique si existe, en ese caso sí puedes hacer un SELECT buscando el
dato. Dependerá de cómo se lo presentes al usuario.

En opinión muy personal, me gustan más las acciones divididas así: La acción
Insertar siempre agrega un objeto nuevo, la acción Buscar muestra los datos
encontrados y habilita a las acciones Eliminar y Modificar.

saludos
gux
Respuesta Responder a este mensaje
#4 Maxi
27/11/2004 - 01:45 | Informe spam
Hola Gux, comparto en todo lo que indicas :) pero...

Hay casos donde se justifica hacer antes una verificacion para que el motor
no la tenga que hacer. Esto puede un enorme paso de proceso y sobre todo no
generar transacciones al divino boton!! pero ojo, este tipo de soluciones
las tuve que aplicar en casos muy pero muy particulares, para lo general es
como has indicado :)

"Gustavo Larriera [MVP]" escribió en el mensaje
news:ez$
"El foxero" wrote in message
news:
> Para salvar un registro que tengo en pantalla debo primero buscarlo para
> saber si no existe para luego hacer un insert pero si existe hacer un
> update.

La respuesta es: No.

En un sistema de base de datos como SQL (lo mismo pasa con Oracle, DB2,
Informix...) el control de consistencia de datos es tarea del motor
relacional y se hace mediante transacciones. Lo que haces es siempre
insertar y atrapar una excepción si el motor te responde que no pudo
insertar debido a X problema (e.g. una clave primaria duplicada).

Es decir, la lógica usada *no* es "busco si el dato no existe y si no
existe, lo inserto"... lo que se hace es "inserto y veo si todo salió ok".
En T-SQL es algo así:

INSERT ...
IF @@ERROR <> 0


Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.


Respuesta Responder a este mensaje
#5 El foxero
27/11/2004 - 02:00 | Informe spam
Ok.. Entiendo. Si el usuario esta en modo de actualizar pues se supone que
al grabar se va a mandar un update. Si esta en modo insertar pues se supone
que voy a hacer un insert y al hacerlo detectar si la clave ya existe con la
tecnica de ensayo y error. Te agradezco la aclaracion. Ya me surgiran
otras cositas cuando siga progresando en mi aprendizaje... :)


>

No sé bien cómo es el caso de uso del formulario que le muestras al


usuario.
Supongo que si deseas que desde el mismo lugar el usuario agregue uno


nuevo
o modifique si existe, en ese caso sí puedes hacer un SELECT buscando el
dato. Dependerá de cómo se lo presentes al usuario.

En opinión muy personal, me gustan más las acciones divididas así: La


acción
Insertar siempre agrega un objeto nuevo, la acción Buscar muestra los


datos
encontrados y habilita a las acciones Eliminar y Modificar.

saludos
gux


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida