Convertir mdf a sqlite

Convertir MDF a SQLITE

Convierta los datos MDF de SQL Server en una base de datos SQLite portátil con schema y comprobaciones de compatibilidad.

Cree archivos SQLITE en línea

Todavía no podemos leer archivos MDF, así que esta conversión no está disponible. Si puede exportar su trabajo a alguno de estos formatos u otros, lo convertiremos en SQLITE:

Cómo convertir un archivo mdf a sqlite

Una base de datos de SQL Server puede necesitar convertirse en un archivo SQLite portable para una aplicación de escritorio, una implementación integrada, pruebas o distribución sin requerir una instancia de SQL Server. La conversión es una exportación entre motores de bases de datos, no un simple cambio de extensión de archivo: primero se debe abrir un archivo MDF con SQL Server y copiar su esquema y sus filas en SQLite.

Qué es el formato MDF

MDF es el formato de archivo de datos principal utilizado por Microsoft SQL Server. Contiene objetos de base de datos como tablas, índices, vistas, procedimientos almacenados y datos de tablas; normalmente, un archivo .ldf complementario contiene el registro de transacciones.

Puede encontrarse con archivos MDF al recibir una copia de seguridad de una base de datos de SQL Server o una base de datos separada, al copiar una base de datos entre servidores Windows o al trabajar con aplicaciones creadas sobre SQL Server. Microsoft SQL Server, SQL Server Express, SQL Server Developer y SQL Server LocalDB pueden adjuntar y leer archivos MDF. Un MDF no es un formato de intercambio independiente, y las herramientas de SQLite normalmente no pueden abrirlo directamente.

Qué es el formato SQLITE

SQLite almacena una base de datos relacional completa en un solo archivo, normalmente con la extensión .sqlite, .sqlite3 o .db. Las aplicaciones lo utilizan para almacenamiento local, software integrado, pruebas, datos móviles, funcionamiento sin conexión e intercambio de datos basado en archivos.

SQLite no requiere un servidor de bases de datos y es fácil de copiar o archivar. Su sistema de tipos es más flexible que el de SQL Server, pero no proporciona equivalentes directos para todas las funciones de SQL Server. Los procedimientos almacenados, los trabajos de SQL Server Agent, los servidores vinculados, los permisos y muchas configuraciones a nivel de servidor no pueden trasladarse a un archivo SQLite.

Cómo convertir realmente MDF a SQLITE

1. Adjuntar el MDF a SQL Server

Instale una edición compatible de SQL Server, preferiblemente Developer para trabajos que no sean de producción o Express para una instancia local ligera. En SQL Server Management Studio, conéctese a la instancia y seleccione Databases → Attach. Agregue el archivo MDF y compruebe la ruta del archivo de registro mostrada.

Si la base de datos original se separó correctamente, su archivo LDF debería estar disponible junto al MDF. No ejecute comandos de reparación o reconstrucción del registro en la única copia. Una base de datos que se haya copiado mientras SQL Server la estaba utilizando puede ser incoherente y debería restaurarse desde una copia de seguridad de SQL Server.

2. Inspeccionar el esquema de origen

Compruebe las tablas, vistas, claves, columnas identity, columnas calculadas, triggers, intercalaciones y tipos específicos de SQL Server no compatibles en SSMS. Una consulta como SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'; muestra las tablas base que deben exportarse.

3. Exportar tablas con una herramienta compatible con bases de datos

Para realizar una conversión repetible, use Python con pyodbc para SQL Server y el módulo sqlite3 de la biblioteca estándar. Instale el controlador ODBC de SQL Server y ejecute:

python -m pip install pyodbc

El siguiente ejemplo copia una tabla. Reemplace los detalles de conexión y el nombre de la tabla, y repita el proceso para cada tabla necesaria después de crear el esquema de SQLite:

import sqlite3
import pyodbc

src = pyodbc.connect(
    "DRIVER={ODBC Driver 18 for SQL Server};"
    "SERVER=localhost;DATABASE=SourceDb;Trusted_Connection=yes;"
    "Encrypt=no;"
)
dst = sqlite3.connect("converted.sqlite")
source_table = "dbo.Customers"
target_table = "Customers"

cur = src.cursor()
cur.execute(f"SELECT * FROM {source_table}")
columns = [d[0] for d in cur.description]

def quote(name):
    return '"' + name.replace('"', '""') + '"'

def sqlite_type(value):
    if isinstance(value, (bytes, bytearray, memoryview)):
        return "BLOB"
    if isinstance(value, bool):
        return "INTEGER"
    if isinstance(value, int):
        return "INTEGER"
    if isinstance(value, float):
        return "REAL"
    return "TEXT"

first = cur.fetchone()
if first is not None:
    types = [sqlite_type(v) for v in first]
    dst.execute("CREATE TABLE " + quote(target_table) + " (" +
                ", ".join(quote(c) + " " + t for c, t in zip(columns, types)) + ")")
    placeholders = ",".join("?" for _ in columns)
    insert = "INSERT INTO " + quote(target_table) + " VALUES (" + placeholders + ")"
    dst.executemany(insert, [first] + cur.fetchall())

dst.commit()
src.close()
dst.close()

Para una migración completa, cree las tablas explícitamente a partir del esquema de SQL Server en lugar de inferir los tipos de la primera fila. Exporte las tablas principales antes que las tablas secundarias, inserte las filas y, después, agregue las claves foráneas y los índices. Una opción gráfica es DB Browser for SQLite después de exportar cada tabla de SQL Server a CSV, pero CSV pierde las restricciones, los tipos exactos, la posibilidad de admitir valores NULL y los valores binarios, por lo que es más adecuado para conjuntos de datos pequeños o planos.

4. Validar el archivo resultante

Abra converted.sqlite en DB Browser for SQLite o SQLiteStudio y compare el número de filas mediante consultas de SQL Server y SQLite como SELECT COUNT(*) FROM Customers;. Ejecute joins representativos, compruebe las fechas y el texto Unicode, y verifique que se hayan recreado las claves principales, los índices y las claves foráneas.

Calidad, compatibilidad y limitaciones

Las columnas IDENTITY de SQL Server normalmente se convierten en claves enteras de SQLite, pero SQLite no reproduce el comportamiento de generación de identity a menos que el esquema de destino utilice INTEGER PRIMARY KEY correctamente. UNIQUEIDENTIFIER, DECIMAL, XML, geography, hierarchyid, datetimeoffset y varbinary(max) de SQL Server requieren asignaciones deliberadas; los GUID pueden almacenarse como texto o blobs de 16 bytes, y los valores decimales de alta precisión no deben convertirse mediante números de coma flotante binarios.

Las vistas y consultas suelen requerir una reescritura de SQL porque las funciones de SQL Server, la sintaxis con corchetes, las funciones de fecha y los joins no son totalmente compatibles con SQLite. Los procedimientos almacenados, los triggers, los índices de texto completo, los permisos y la automatización del lado del servidor deben rediseñarse u omitirse. SQLite también permite lectores simultáneos, pero tiene un comportamiento diferente de bloqueo de escritura y de transacciones, por lo que un archivo convertido no es un reemplazo directo de una base de datos de SQL Server multiusuario.

Por lo general, los convertidores en línea no son adecuados para archivos MDF porque necesitan un motor de SQL Server para adjuntar e interpretar la base de datos, y cargar un MDF puede revelar todos los datos que contiene. Mantenga la conversión local, a menos que la base de datos se haya anonimizado y el proveedor tenga una política clara de seguridad y conservación de datos.

MDF vs SQLITE: comparación de formatos

Cómo se comparan los formatos MDF y SQLITE en las propiedades que más importan para esta conversión.

Comparación de los formatos de archivo MDF y SQLITE
Propiedad .MDF Media Descriptor File .SQLITE SQLite database
Estándar abierto No Sí
Compresión Ambos Sin compresión
Tamaño de archivo típico Grande Pequeño
Se abre en un navegador web No No
Edición posterior No editable directamente Limitado
Compatibilidad con metadata Básico Básico
Legible como texto plano No No
Más adecuado para Archivado a largo plazo Intercambio de datos
Introducido 2000 2000
Desarrollador Alcohol Soft D. Richard Hipp / SQLite Consortium
Tipo MIME — application/vnd.sqlite3

Otras conversiones de archivos .mdf

Conversión inversa

Convertir a .sqlite
desde otros formatos

Compartir en redes sociales: