jueves, 16 de abril de 2009

Update masivo, UPDATE FROM JOIN

Hoy vi algo en SQL que nunca me había imagino que se podía hacer asi


UPDATE dbo.Table2
SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB
FROM dbo.Table2
INNER JOIN dbo.Table1
ON (dbo.Table2.ColA = dbo.Table1.ColA);


O sea que podemos updatear el valor de una columna de la tabla 1 usando el valor de una columna de otra tabla, haciendo el join entre las tablas con los criterios que usamos en cualquier JOIN. Obviamente tambien puede agregarse un WHERE para filtrar los registros que queremos updatear.

Lo único que me suena raro lo saque del artículo de Wikipedia de UPDATE

The SQL:2003 standard does not support updates of a joined table. Therefore, the following method needs to be used. Note that the subselect in the SET clause must be a scalar subselect, i.e., it can return at most a single row.
UPDATE T1
SET C1 = ( SELECT T2.C2
FROM T2
WHERE T1.ID = T2.ID )
WHERE EXISTS ( SELECT 1
FROM T2
WHERE T1.ID = T2.ID )


En SQLSERVER 2000 funciona el UPDATE FROM JOIN. El método que propone la wiki eno se me había ocurrido, pero es muy bueno también, y además claramente es válido en ANSI SQL.
Respecto de la claridad de cada statemente, depende de si uno esta acostumbrado al UPDATE FROM JOIN o no, ya que este parece raro a primera vista. En cambio, la segunda versión es más natural ya que es similar a un UPDATE típico (recordar que para poder poner un subquery dentro del SET de un UPDATE este subquery deber ser escalar, es decir, retornar un solo registro y una sola columna)

Además, las misma técnicas pueden usarse con DELETE.
Y finalmente, aunque obviamente es más conocido, no olvidemos que para INSERT masivo siempre este el viejo INSERT INTO tabla (col1, col2, ... ) SELECT

lunes, 6 de abril de 2009

Speech atribuido a Bryan Dyson, CEO de Coca Cola

Hace mucho escuché la primera parte y me pareció de las mejores frases que jamás escuché acerca de "la vida", principalmente porque no es una de esas cursilerías baratas. Nunca supé de quién era, hasta que hace poco encontre que formaba parte de un discurso. El resto del mismo no me parece tan bueno, y hasta un poco cursi al estilo cadena de mail, pero vale la pena mirarlo

Imagine life as a game in which you are juggling some five balls in the air. You name them - work, family, health, friends and spirit … and you’re keeping all of these in the air.

You will soon understand that work is a rubber ball. If you drop it, it will bounce back. But the other four balls - family, health, friends and spirit - are made of glass. If you drop one of these, they will be irrevocably scuffed, marked, nicked, damaged or evenshattered. They will never be the same. You must understand that and strive for Balance in your life.

How?

Don’t undermine your worth by comparing yourself with others. It is because we are different that each of us is special.

Don’t set your goals by what other people deem important. Only you know what is best for you.

Don’t take for granted the things closest to your heart. Cling to them as you would your life, for without them, life is meaningless.

Don’t let your life slip through your fingers by living in the past or for the future. By living your life one day at a time, you live all the days of your life.

Don’t give up when you still have something to give. Nothing is really over until the moment you stop trying.

Don’t be afraid to admit that you are less than perfect. It is this fragile thread that binds us to each together.

Don’t be afraid to encounter risks. It is by taking chances that we learn how to be pave.

Don’t shut love out of your life by saying it’s impossible to find time. The quickest way to receive love is to give; the fastest way to lose love is to hold it too tightly; and the best way to keep love is to give it wings!

Don’t run through life so fast that you forget not only where you’ve been, but also where you are going.

Don’t forget, a person’s greatest emotional need is to feel appreciated.

Don’t be afraid to learn. Knowledge is weightless, a treasure you can always carry easily.

Don’t use time or words carelessly. Neither can be retrieved. Life is not a race, but a journey to be savoured each step of the way…

–Brian G. Dyson

President and CEO, Coca-Cola Enterprises during his speech at the Georgia Tech 172nd Commencement Address Sept. 6, 1996

Subversion

Les paso mi combo favorito para trabajar con Subversion


  • Cliente: SmartSVN portable (link). Buena GUI, no requiere instalacion (portable) solo requiere la JRE instalada (hoy en dia casi todo el mundo la tiene). Otra buena opcion mas facil de usar aún es el TortoiseSVN que se integra al shell de Windows (boton derecho)
  • Server: http://xp-dev.com/ (alojamiento de hasta 1GB gratis, no tienen que preocuparse por instalar un server de SVN ni administrarlo.


Si nunca usaron Subversion, creanme que es muy facil (administrarlo es otra cosa). Como cualquier aplicacion de control de versiones (SourceSafe, CVS), el usuario basicamente debe saber


  • Hacer el checkout inicial (en caso de que quieran bajar un proyecto existente)
  • Crear el modulo inicial (en caso de que quieran crear un nuevo proyecto)
  • Hacer update (para traer los cambios del repositorio al local)
  • Hacer commit (para llevar los cambios del repositorio al local)


Este tutorial, aunque apuntado a manejar SVN por command line, puede usarse para entender lo basico y mucho mas