Archivo de la etiqueta: sql-server

Importar datos a SQL Server directamente desde Excel

Otro de esos pequeños problemas cotidianos que pueden acabar por convertirse en una tarea pesada. Siempre que tengo que importar datos de una hoja Excel acabo dando mil vueltas exportando a csv por aquí, importando por allá, etc. cuando en realidad es extremadamente sencillo, copiar y pegar.

En el Excel, seleccionamos las celdas a copiar y… las copiamos :), Ctrl+C o click en el botón derecho y copiar.

En el cliente de Microsoft SQL Server, abrimos la tabla donde queremos importar los datos y seleccionamos todo haciendo click en la celda superior izquierda, la primera de todas.

Ahora simplemente debemos pegar las celdas que habíamos copiado anteriormente, (Ctrl+V o botón derecho y pegar). Ya está! Así de sencillo. Anda que no le he dado vueltas yo a estas cosas…

Debes prestar atención, eso sí, a las características de cada campo (autonuméricos, campos null, etc…).

Insertar en Sql-Server desde fuentes de datos con php en la línea de comandos

La aparentemente cosa más tonta del mundo me ha tenido todo el día liado. Y no es la primera vez. Anteriormente me había pasado al procesar RSS, hoy ha sido al consumir unos webservices (SOAP).

Nuestros sistemas trabajan con MsSql, Apache, PHP5 y Windows 2003 Server. De vez en cuando necesitamos crear tareas que lean desde determinadas fuentes de datos y los inserten en una base de datos. La última vez que me había ocurrido era leyendo un RSS. Si lo lanzaba a través de la línea de comandos con php.exe la codificación que se guardaba en la base de datos era errónea, todos los acentos, eñes y demás caracteres no ASCII se perdían. El caso es que al ejecutarlo a través de Apache todo funcionaba bien.

La otra vez, por falta de tiempo, lo dejé pasar y montamos la tarea a través de Apache con wget. Pero ahora no era la mejor solución, hay que procesar varios webservices y la tarea se puede prolongar durante mucho tiempo, con lo que tener un hilo de apache corriendo tanto tiempo no me parece lo más adecuado.

Después de mucho googlear he encontrado la solución. Resulta que al ejecutar la tarea desde la línea de comandos se produce una conversión automática de ANSI a OEM:

Any clients running Windows NT or Windows 95/98 are considered ANSI clients. Console-based applications, such as the isql utility, are considered OEM clients.

Por lo tanto nos cambia la codificación sin remedio. Para ello hay una solución, y es ejecutar nuestro script a través de un wrapper que lance el proceso sin ser bajo consola, digamos que engañando al sistema operativo. En tu instalación de php tendrás un php-win.exe que hace exactamente lo mismo que el cliente habitual pero sin lanzarlo en la línea de comandos, parecerá que no ha hecho nada pero si abres el administrador de tareas verás el proceso php-win.ese corriendo e insertando correctamente en la base de datos.