Leer archivo de tabla de Visual Fox Pro (DBF) desde SQL Server

En mi trabajo, debido a que varios sistemas que se utilizan han sido desarrollados en Visual Fox, ha surgido la necesidad de leer los archivos de tabla (.DBF), desde SQL Server, para poder importar la información de los sistemas antiguos a los nuevos.

Existen varios driver para realizar esta tarea (dBase, ODBC, OleDB, etc.). En esta entrada me centraré en explicar como leer los archivos de tabla utilizando el driver de OleDB.

Primeramente, hay que instalar el driver OleDB en la computadora que alberga la instancia de SQL Server. El driver puede descargarse aquí. Si no me equivoco, no es necesario reiniciar la computadora ni los servicios de SQL Server luego de la instalación (puedo equivocarme, jejeje :)).

En segundo lugar, hay que asegurarse que el usuario que ejecuta la instancia de SQL Server, tenga permiso de lectura sobre el archivo de tabla DBF. Si se utiliza autenticación de Windows, entonces el usuario de Windows debe tener permiso de lectura sobre el archivo.

Finalmente, para leer el archivo, basta con hacer la lectura utilizando la función T-SQL llamada OPENROWSET, de la siguiente manera:

SELECT *  FROM OPENROWSET(
'VFPOLEDB.1',
'C:\ruta\del\archivo';'';'',
'SELECT * FROM NOMBRE_ARCHIVO')

Por ejemplo, para leer el archivo C:\Users\UsuarioPruebas\Documents\TABLA.dbf, la sentencia sería la siguiente:

SELECT *  FROM OPENROWSET(
'VFPOLEDB.1',
'C:\Users\UsuarioPruebas\Documents';'';'',
'SELECT * FROM TABLA')

El comando ha sido probado en SQL Server 2005, pero creería que también funciona para versiones posteriores (2008, 2012).

Feliz día 🙂

SQL Server Snippets – Aproximación de valor real a N-ésimo decimal superior/inferior

Supóngase que se tiene un valor real o float, que se quiere aproximar al N-ésimo decimal superior. Por ejemplo:


DECLARE @valor FLOAT
SET @valor = 1.9011

Para aproximar al 3er decimal superior, basta usar la función mátematica integrada de T-SQL llamada CEILING, de la siguiente forma:


SELECT CEILING(@valor*1000)/1000

El resultado de la operación es 1.902. Observemos paso a paso lo que sucede: Sigue leyendo

SQL Server Snippets – Columna de fecha de última modificación en SQL Server

Supongamos que por cuestiones de control de modificaciones y auditoría, se quiere contar con un campo de fecha de última modificación en todas las tablas de una base de datos de SQL Server.

El inconveniente es que SQL Server no posee nativamente un tipo de dato que guarde la fecha de última modificación de un registro, el cual se actualice automáticamente al modificar una fila de datos. Por ello, una alternativa a esto es definir una columna de tipo datetime en cada tabla que se actualice cada vez que se modifique uno o más registros de esta, a través de un trigger. Sigue leyendo

Nueva sección: SQL Server Snippets

Minientrada

Saludos. En este día quiero anunciarles que he decidido iniciar una nueva sección, llamada SQL Server Snippets, con el objetivo de no dejar de lado el blog debido a la falta de tiempo, y compartir algunas de las cosas que aprendo día a día en mi trabajo con SQL Server. Esta sección consistirá básicamente en entradas breves con segmentos de código (snippets) generalmente cortos, pero muy útiles e interesantes.

Los invito a ver mi primera entrada de esta sección: Tablas con columna autonumérica

Feliz día.

SQL Server Snippets – Tablas con columna autonumérica

Este primer snippet consiste en una consulta para obtener las tablas de la base de datos en uso (es decir, la base de datos seleccionada actualmente), que poseen una columna autonumerada (IDENTITY), incluyendo el nombre de dicha columna. Sigue leyendo