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
- Bases de datos
- Aún sin calificaciones.
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.
| 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 |