martes, 28 de diciembre de 2010

Generar sentencia INSERT a partir de los datos de una tabla T-SQL

Luego de una muy buena cena navideña y un posterior fin de semana de paz y amor y no levantarme ni sábado ni domingo es que les traigo el nuevo TIP del  día.

Ayer uno de los técnicos de la empresa donde trabajo se vio bastante afligido por que tenia que realizar una copia de muchos registros de una tabla para luego volver a insertarlos modificando un par de valores. Luego de que me comentara que su plan era insertar a mano cerca de 1000 registros se me ocurrió la idea de hacer una pequeña consulta que a partir de los datos (o parte de estos) de una tabla X se generarán las sentencias INSERT con los ajustes que se necesitaba hacer.
Muchas veces las cosas que en una primera instancia parecen una tarea compleja, en la práctica la solución es tan sólo invertir 5 minutos de forma dedicada. Por lo que para evitar que inviertan 5 minutos a continuación les dejo un pequeño How-To para transformar los datos de una tabla en sentencias Insert.

Paso 1: conocer los nombres de las campos de la tabla. SELECT TOP 1 * FROM <LaTabla>

Paso 2: con los nombres de los campos (en mi caso Campo1, Campo2 y Campo3 armar una sentencia SELECT como una cadena de caracteres que tenga desde el INSERT hasta la apertura del primer parentecis tras la instrucción VALUE.

Ej: SELECT 'INSERT INTO <LaTabla>(Campo1, Campo2, Campo3) VALUES ('

Paso 3: adicionar los campos de la tabla (para evitar tener que lidiar con el tipo de dato es más práctico castear todo a nvarchar).

Ej: + 
CAST(Campo1 AS nvarchar) + ' '''','''' '
CAST(Campo2 AS nvarchar) + ' '''','''' '
CAST(Campo3 AS nvarchar) + '''' ')'
/*Recuerden que el apostrofe es un carácter reservado de MSSQL, por lo que si se necesita utilizar dentro de una sentencia se debe introducir 4 veces. SELECT '''' mostrará como resultado ' */

Paso 4: indicar la tabla y las condiciones para recuperar los datos.

Ej: FROM <LaTabla> WHERE <Campo1> = 1

Paso 5: Ejecutar y disfrutar!

Ahora la consulta completa:

SELECT 'INSERT INTO LaTabla(Campo1, Campo2, Campo3) VALUES ('
CAST(Campo1 AS nvarchar) + ' '''','''' '
CAST(Campo2 AS nvarchar) + ' '''','''' '
CAST(Campo3 AS nvarchar) + '''' ')'
FROM LaTabla
WHERE Campo1 = 1

Ojala les sirva!

No hay comentarios:

Publicar un comentario