Cómo importar datos a SQL Server desde distintos orígenes de datos

Publicado: 1 de marzo de 2015 en Actualidad

Cómo importar datos a SQL Server desde distintos orígenes de datos

Por Enrique Martínez Montejo «SoftJaén»
[MS MVP – VB]
Última revisión: 09/09/2004

Mediante las funciones OPENDATASOURCE y OPENROWSET de Transact-SQL, puede importar datos a una base de SQL Server desde distintos orígenes de datos OLE DB, como bien podría ser una base de datos Microsoft Access, un libro de trabajo de Microsoft Excel, o un simple archivo de texto delimitado, entre otros orígenes de datos que dispongan de su correspondiente controlador ISAM instalable.

Importar datos desde una base de datos Access no protegida
Si nuestra base de datos Access no se encuentra protegida con cualquiera de los dos niveles de protección (a nivel compartido o a nivel de usuario), podemos utilizar la función OPENROWSET para importar datos a una base de SQL Server. En este supuesto, es sumamente necesario que el usuario genérico Admin tenga acceso a los datos que se desean importar desde la base de datos de Access, ya que será dicho usuario el que ejecutará la importación:

descargar

Dim cnn AS ADODB.Connection Dim lngRegAfectados AS Long Dim SQL AS String ' Configuramos una conexión con la base de ' datos de SQL Server, utilizando la seguridad ' integrado de Windows NT ' SET cnn = New ADODB.Connection WITH cnn .CursorLocation = adUseClient .Provider = "SQLOLEDB" .ConnectionString = "Data Source=NOMBRE_INSTANCIA_SQL_SERVER;" & _ "Initial Catalog=Northwind;" & _ "Integrated Security=SSPI;" .Open End WITH ' Si la tabla ya existe en la base de datos de ' SQL Server, la eliminamos ' cnn.Execute _ "IF EXISTS(" & _ "SELECT * FROM INFORMATION_SCHEMA.TABLES " & _ "WHERE TABLE_NAME = 'TablaDeAccess')" & _ "DROP TABLE TablaDeAccess", , adCmdText ' Construimos la consulta SQL de creación de tabla para ' importar la tabla Clientes de la base de datos Neptuno.mdb ' SQL = "SELECT * INTO TablaDeAccess " & _ "FROM OPENROWSET(" & _ "'Microsoft.Jet.OLEDB.4.0'," & _ "'C:\Mis documentos\Neptuno.mdb';" & _ "'admin';''," & _ "'SELECT * FROM Clientes')" ' Ejecutamos la consulta ' cnn.Execute SQL, lngRegAfectados, adCmdText ' Comprobamos los registros afectados ' MsgBox "Registros afectados: " & lngRegAfectados ' Cerramos la conexión ' cnn.Close 

Importar datos desde una base de datos Access protegida a nivel compartido
Si la base de datos de Access sólo se encuentra protegida a nivel compartido (tiene establecida una contraseña), utilizaríamos la siguiente sintaxis de la función OPENROWSET:

descargar

' Construimos la consulta SQL de creación de tabla para ' importar la tabla Clientes de la base de datos Neptuno.mdb ' SQL = "SELECT * INTO TablaDeAccess " & _ "FROM OPENROWSET(" & _ "'Microsoft.Jet.OLEDB.4.0'," & _ "'MS Access;" & _ "DATABASE=C:\Mis documentos\Neptuno.mdb;" & _ "UID=Admin;" & _ "PWD=contraseña'," & _ "'SELECT * FROM Clientes')" 

Tenga en cuenta que el parámetro PWD se refiere exclusívamente a la contraseña de la base de datos, no a la contraseña del usuario Admin, que en el supuesto de disponer de alguna e indicarla en el citado parámetro, la importación no se podrá llevar a cabo, debido a que obtendrá el error: No es una contraseña válida.

Importar datos desde una base de datos Access protegida a nivel compartido y a nivel de usuario
En el supuesto de que la base de datos de Access se encuentra protegida mediante una contraseña (seguridad a nivel compartido), y a la vez necesitamos que sea otro usuario distinto al usuario génerico Admin el que acceda a los datos (seguridad a nivel de usuario), en lugar de utilizar la función OPENROWSET necesitará utilizar la función OPENDATASOURCE, dado que la primera no permite indicar los parámetros de conexión para especificar la contraseña de la base de datos, así como la ruta del archivo de información de grupos de trabajo, dado que a la fecha de publicación de éste artículo, no he encontrado la manera de poder especificar dichos parámetros mediante la función OPENROWSET:

descargar

' Construimos la consulta SQL de creación de tabla para ' importar la tabla Clientes de la base de datos Neptuno.mdb ' SQL = "SELECT * INTO TablaDeAccess " & _ "FROM OPENDATASOURCE(" & _ "'Microsoft.Jet.OLEDB.4.0'," & _ "'DATA Source=C:\Mis documentos\Neptuno.mdb;" & _ "Jet OLEDB:DATABASE Password=contraseña_base_datos;" & _ "Jet OLEDB:System DATABASE=C:\Windows\System32\System.mdw;" & _ "User Id=cuenta_usuario;" & _ "Password=contraseña_usuario')" & _ "... Clientes" 

Importar datos desde un libro de trabajo de Excel
Si desea importar a SQL Server datos de una hoja de cálculo de Excel, puede utilizar tanto la función OPENROWSET como la función OPENDATASOURCE, debiendo tener en cuenta que si desea especificar una hoja de cálculo, deberá de encerrar su nombre entre corchetes y añadir el signo $, como por ejemplo, [Hoja1$]. Si desea especificar un rango de celdas con nombre, especifique solamente el nombre del rango sin el signo del dólar.

Una vez que tenga establecida una conexión con la base de datos de SQL Server, puede ejecutar cualquiera de las siguientes consultas SQL:

descargar

'Importar un rango de celdas con nombre SQL = "SELECT * INTO TablaDeExcel " & _ "FROM OPENDATASOURCE(" & _ "'Microsoft.Jet.OLEDB.4.0'," & _ "'DATA Source=C:\Mis documentos\Libro1.xls;" & _ "Extended Properties=""Excel 8.0;HDR=No""')" & _ "...Clientes" 

Si utiliza la función OPENDATASOURCE, observe que deberá de encerrar entre dos pares de comillas dobles los parámetros del ISAM de Excel que desee especificar, cuestión ésta que no es necesario indicar si utiliza la función OPENROWSET, tal y como se muestra a continuación.

descargar

'Importar una hoja de cálculo completa SQL = "SELECT * INTO TablaDeExcel " & _ "FROM OPENROWSET(" & _ "'Microsoft.Jet.OLEDB.4.0'," & _ "'Excel 8.0;Database=C:\Mis documentos\Libro1.xls;HDR=Yes'," & _ "'SELECT * FROM [Hoja1$]')" 

Importar datos desde un archivo de texto delimitado
Por último, mostraré la forma de importar los datos contenidos en un archivo de texto a nuestra base de datos de SQL Server, trabajo éste que podrá realizarlo mediante las dos funciones T-SQL comentadas. Indicar únicamente que sólo deberá de especificar la ruta de la carpeta donde se encuentre el archivo de texto, escribiendo el nombre del archivo y su extensión en la cláusula FROM de la consulta SQL

descargar

'Importar mediante la función OPENROWSET SQL = "SELECT * INTO TablaDeTexto " & _ "FROM OPENROWSET(" & _ "'Microsoft.Jet.OLEDB.4.0'," & _ "'TEXT;Database=C:\Mis documentos;HDR=No'," & _ "'SELECT * FROM Clientes#txt')" 'Importar mediante la función OPENDATASOURCE SQL = "SELECT * INTO TablaDeTexto " & _ "FROM OPENDATASOURCE(" & _ "'Microsoft.Jet.OLEDB.4.0'," & _ "'DATA Source=C:\Mis documentos;" & _ "Extended Properties=""TEXT;HDR=Yes""')" & _ "...Clientes#txt" 

Tlf: 0412 3759126

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s