DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Como utilizar el Update en nuestras bases de datos, varias opciones

Por royrojas | 10/17/2005 | Visitas 11,161 | Voto 4.00
Aunque parezca muy simple vamos a explicar como utilizar el update en nuestras base de datos, ya que hay muchas formas de poder hacerlo
Categorías : SQL Server
En muchas ocaciones nuestros update no van a ser tan sencillos como cuando tenemos en el where un nombre_columna = @variable, generalmente tendremos que hacer asuntos mas complejos, donde incluso tengamos subqueys en nuestros update, para modificar grandes cantidades de datos al mismo tiempo.

Estructura del Update:

UPDATE <table_or_view_name>
SET {<column_name> = <literal> |
<expression> |
(<single_row_select_statement>) |
NULL |
DEFAULT,...}
[WHERE <predicate>]


Update de una columna de una sola fila
Talves este es el update más sencillo y común que nos podremos encontrar en nuestas aplicaciones

UPDATE product
SET prod_price_n = 18.24
WHERE prod_id_n = 990


Update multiples columnas en una sola fila
Algunas veces tendremos que modificar varios datos a la ves en una misma fila

UPDATE product
SET prod_pltwid_n = 5,
prod_pltlen_n = 7
WHERE prod_id_n = 990


Update de una columna para todas las filas
Este es un update general si importar la llave o algún dato para el filtro, solo vamos a actualizar el dato de una columna para todas las filas de ta tabla

UPDATE product
SET prod_price_n = prod_price_n * 1.1


Update una columna en una fila utilizando un subquery
Cuando necesitemos realizar una actualización mas dinámica, vamos a tener que utilizar subquerys.

Un asunto importante es que el subquery no debe de retornar mas de una fila por que va a dar error y si el subquery no retorna datos se le va a signar null al valor de la columna.

Usted puede concatenar dos o más columnas a la hora de asignar el valor correspondiente, SET my_col = (SELECT col1 + col2 ...) pero no podria hacer SET my_col = (SELECT col1, col2 ...) asi que siempre hay que tenerlo presente.

UPDATE order_header
SET ordhdr_payterms_fn =
(SELECT payterms_id_n
FROM payment_terms
WHERE payterms_code_s = ‘N21531’)
WHERE ordhdr_id_n = 30670


El ejemplo anterior era directo, usted derivó relativamente el valor que usted necesitó para la actualización de otro valor dado. Pero las condiciones son generalmente más complicadas. Ud puede relacionar la fila que va a modificar con alguna o algunas columnas de la tabla con la que quiere actiualizar los datos.

UPDATE order_header
SET ordhdr_payterms_fn =
(SELECT payterms_id_n
FROM payment_terms,
customer
WHERE payterms_id_n = cust_paytermsid_fn AND
ordhdr_custid_fn = cust_id_n)


Update utilizando Join en el subquery
Una de las mejores opciones para hacer updates con tablas que contienen muchos registros es utilizar el join, por que maneja mejor la correlación entre las tablas

UPDATE order_header
SET ordhdr_payterms_fn =
(SELECT payterms_id_n
FROM payment_terms
JOIN customer
ON payterms_id_n = cust_paytermsid_fn
JOIN order_header
ON ordhdr_custid_fn = cust_id_n)
Area de Comentarios
Por Anónimo - Fecha: 2006/02/10 11:56 AM
"Un asunto importante es que el subquery no debe de retornar mas de una fila por que va a dar error y si el subquery no retorna datos se le va a signar null al valor de la columna".

Entonces.¿Como puedo asignar a una columna de una tabla el valor de otra columna de otra tabla ,dando por hecho que son de tipos compatibles y que el numero de filas de ambas columnas es identico(
pero mayor que 1 ) ?


Es decir ,quiero hacer algo como esto:

UPDATE TABLA1
SET COLUMNA1=(SELECT COLUMNA2 FROM TABLA2)

Sin que salga el error:"La subconsulta de una sola fila devuelve mas
de una fila"


¿O sólo se pueden asigar los datos uno a uno , es decir ,haciendolo fila a fila?

Gracias

Por Anónimo - Fecha: 2006/02/24 09:17 AM
Muy util el resumen, al fin despues de una hora de googlear encuentro lo que necesito!!!
Muchas gracias
Por Anónimo - Fecha: 2006/03/01 02:00 PM
buenas señores; poseo una tabla que deseo alimentar en la base de datos, pero modificandole una columna y conservando el resto de la información; el problema es que no es valor único, es decir, cada valor debe ir en una posición en la tabla, dependiendo de un valor contenido en otra columna, que guarda relación con una columna de la tabla origen.
Entiendo que el update es para un valor a la vez, si no es así; ¿como podría editar varios valores con un solo comando? Gracias...
Por Anónimo - Fecha: 2006/04/06 07:06 AM
Muchisimas gracias por este articulo.
Me ha venido muy bien para resolver un asunto que me tenia "de cabeza".
Por Anónimo - Fecha: 2007/07/19 09:42 PM
como puedo hacer para modificar los datos de toda una fila con la sentencia update
Por Anónimo - Fecha: 2008/06/12 11:55 PM
QUISIERA SABER SI ESTA CONSULTA ESTA BIEN:
UPDATE PEDIDOS SET pdd_vlr=
(SELECT SUM(pdd_dtl_cnt_pdd*pdd_dtl_vlr_unt)
FROM PEDIDOS, PEDIDOS_DETALLE
WHERE PEDIDOS.pdd_cdg=PEDIDOS_DETALLE.pdd_cdg)
WHERE
(SELECT PEDIDOS.pdd_cdg
FROM PEDIDOS, PEDIDOS_DETALLE
WHERE PEDIDOS.pdd_cdg=PEDIDOS_DETALLE.pdd_cdg)";
Por Anónimo - Fecha: 2012/07/19 02:16 AM
I have been doing yoga for over 30 years and now have arthritis in my knees. It would be woednrful to have yoga pants which have pads in the knees!
Por Anónimo - Fecha: 2012/07/20 06:42 AM
MJz8X2 , [url=http://chsctrwmbztu.com/]chsctrwmbztu[/url], [link=http://eqrmgdtuefyt.com/]eqrmgdtuefyt[/link], http://bhwglktfcayt.com/
Por Anónimo - Fecha: 2012/07/21 12:56 PM
lsfqN0 , [url=http://fkopivhxqfjb.com/]fkopivhxqfjb[/url], [link=http://qpfnmshyxswi.com/]qpfnmshyxswi[/link], http://bmzyotxllwyq.com/
Por Anónimo - Fecha: 2015/07/19 03:58 AM
This is a most useful cortnibution to the debate
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
ricardo leppe t
pedrojavier
CALIN
willipinru
richard
ragomez
PER 238
MEX 236
CRI 188
COL 118
ESP 105
ARG 88