---
title: "Migrar SQLite a SQL Server en tu navegador"
description: "Migra una base de datos SQLite a SQL Server: convierte el archivo .db o su volcado en un script con las mismas tablas, claves y datos, y un informe de cambios."
canonical: https://intosql.com/es/sqlite-a-sql-server
last_updated: 2026-10-15
---

# Migrar SQLite a SQL Server en tu navegador

Suelta un archivo de base de datos SQLite (.db, .sqlite, .sqlite3) o el SQL que escribe .dump de sqlite3, y descarga un script de SQL Server con las mismas tablas, claves, índices y datos. Cada columna recibe el tipo en el que caben sus valores, y cada valor que SQL Server no puede guardar tal cual aparece en el informe.

[Guía de migración de SQLite a SQL Server](https://intosql.com/docs/migrations/sqlite-to-sql-server)

[Tipos de datos de SQLite a SQL Server](https://intosql.com/docs/types/sqlite-to-sql-server)

## Qué cambia de SQLite a SQL Server

Cada fila es una regla que aplica el convertidor, con la línea que escribe en el informe cuando la regla cambia algo en tus datos.

| En SQLite | En SQL Server | Línea del informe |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | el tipo en el que caben todos los valores de la columna |  |
| BOOLEAN, BOOL | bit |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | nvarchar(n) o nvarchar(max) |  |
| DECIMAL(p,s), NUMERIC | el tipo exacto cuando cada valor cabe en él, si no un double |  |
| BLOB, and columns holding bytes | varbinary(max) |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | date, datetime2(p) |  |
| JSON holding JSON text | nvarchar(max) |  |
| Infinity in REAL columns | NULL | `invalid_value_null` |
| INTEGER PRIMARY KEY, AUTOINCREMENT | IDENTITY, siguiendo después del id más alto o del valor de sqlite_sequence |  |
| COLLATE NOCASE | una intercalación que no distingue mayúsculas |  |
| generated columns | columnas calculadas, PERSISTED cuando son STORED |  |
| generated columns with functions IntoSQL doesn't write, and the || operator | una columna simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | sin valor predeterminado | `default_not_translated` |
| CHECK constraints | traducidos |  |
| CHECK constraints with functions IntoSQL doesn't write | no se crea | `check_skipped` |
| partial and expression indexes | no se crea | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | después de los datos, WITH NOCHECK, luego comprobada |  |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTION | `foreign_key_action_dropped` |
| VARCHAR(n) holding characters past U+FFFF (emoji) | nvarchar(2n), o nvarchar(max) a partir de 4000 | `text_length_widened` |
| foreign keys to tables the dump doesn't create | no se crea | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | sin NOT NULL | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | listados en el informe | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipos leídos de los valores | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | se conserva |  |
| text that isn't valid UTF-8 | los bytes incorrectos como carácter de reemplazo | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | se copia tal cual | `mojibake_suspected` |

## Carga el script en SQL Server

El script crea las tablas, copia las filas y luego agrega claves, índices y claves foráneas, así que carga rápido y se detiene en el primer error.

```shell
sqlcmd -b -f 65001 -S localhost -d mydb -i sqlite.sql_server.sql
```

Las claves foráneas se agregan WITH NOCHECK y luego se comprueban. Si una fila apunta a una fila que no existe, el script dice qué restricción es y la deja sin comprobar, en lugar de fallar a medias.

Para un volcado grande, ejecuta sqlcmd en la misma máquina que el servidor. Cada lote de hasta 1000 filas se confirma por separado, así que el registro de transacciones se mantiene pequeño.

## Haz el volcado de SQLite para el mejor resultado

El convertidor lee lo que contiene el volcado. Estas opciones conservan más de tus datos en él:

- El archivo de la base de datos se convierte tal cual, leído página por página en tu navegador. Cierra primero la app que escribe en él, para que ningún cambio se quede en su archivo -wal.
- sqlite3 app.db .dump > app.sql escribe la misma base de datos como SQL, que también se convierte, en .sql o .sql.gz.
- DB Browser for SQLite escribe ese SQL con File, Export, Database to SQL file, y también lo hace iterdump() de Python.

## Qué no se convierte

Las vistas y los disparadores se escriben en el lenguaje propio de SQLite. Aparecen en el informe por nombre, nunca se descartan en silencio, para que puedas reescribirlos para SQL Server. Las tablas virtuales, como FTS5 y R*Tree, también aparecen, y sus tablas internas se dejan fuera.

## Preguntas sobre SQLite a SQL Server

### ¿Se sube mi volcado?

No. El convertidor se ejecuta en tu navegador y lee el volcado de tu disco por partes, así que nunca sale de tu computadora. La app de escritorio y la línea de comandos también convierten en tu computadora.

### ¿Qué tan grande puede ser el volcado?

El convertidor nunca tiene todo el volcado en memoria: lee el archivo dos veces, por rangos, y escribe el script sobre la marcha. Los volcados de varios gigabytes se convierten en el navegador, en la app de escritorio y con la línea de comandos.

### ¿Puedo convertir directamente el archivo .db?

Sí. Suelta el archivo .db, .sqlite o .sqlite3: se lee en tu navegador y nunca se sube. El texto con caracteres NUL y cada dígito de un double llegan tal como están guardados, algo que un .dump puede recortar.

### ¿De qué versiones de SQLite puede venir el volcado?

Archivos de base de datos de SQLite 3.0 en adelante, en UTF-8 o UTF-16, y volcados del .dump del shell sqlite3 o de iterdump() de Python. Cada archivo y volcado de prueba viene de sqlite3 3.31 a 3.54, con tablas STRICT y WITHOUT ROWID incluidas, y se compara con su origen celda por celda.

### ¿Cómo se deciden los tipos de columna si SQLite no los aplica?

El tipo declarado es una pista y los valores deciden: una columna se vuelve bigint, decimal, float, date, datetime2, bit, varbinary o nvarchar cuando cada valor cabe en ese tipo. El texto se compara exactamente, como en SQLite, y COLLATE NOCASE sin distinguir mayúsculas.

### ¿Se conservan INTEGER PRIMARY KEY y AUTOINCREMENT?

Sí. Una INTEGER PRIMARY KEY se vuelve una columna IDENTITY, cada fila conserva su id, y el siguiente id sigue después del más alto, o después del valor de sqlite_sequence con AUTOINCREMENT.

### ¿Qué pasa con las vistas y los disparadores?

Aparecen en el informe por nombre y no se convierten, porque cada base de datos los escribe en su propio lenguaje.

### ¿En qué versiones de SQL Server carga el script?

SQL Server 2017 a 2025. El mismo script carga en cada una, y se detiene en el primer error si algo sale mal.

## Desde SQLite

- [SQLite a PostgreSQL](https://intosql.com/es/sqlite-a-postgresql)
- [SQLite a MySQL](https://intosql.com/es/sqlite-a-mysql)
- [SQLite a MariaDB](https://intosql.com/es/sqlite-a-mariadb)
- [SQLite a SQLite](https://intosql.com/es/sqlite-a-sqlite)
- [SQLite a Oracle](https://intosql.com/es/sqlite-a-oracle)

## Hacia SQL Server

- [MySQL a SQL Server](https://intosql.com/es/mysql-a-sql-server)
- [MariaDB a SQL Server](https://intosql.com/es/mariadb-a-sql-server)
- [PostgreSQL a SQL Server](https://intosql.com/es/postgresql-a-sql-server)
- [SQL Server a SQL Server](https://intosql.com/es/sql-server-a-sql-server)
- [Oracle a SQL Server](https://intosql.com/es/oracle-a-sql-server)

## Guía y todos los pares

- [SQL Server a SQLite](https://intosql.com/es/sql-server-a-sqlite)
- [Guía de migración de SQLite a SQL Server](https://intosql.com/docs/migrations/sqlite-to-sql-server)
- [Tipos de datos de SQLite a SQL Server](https://intosql.com/docs/types/sqlite-to-sql-server)
- [Todos los pares de bases de datos](https://intosql.com/es/migracion-de-bases-de-datos)
