Saltar al contenido
Inicio de IntoSQL

Convierte SQL Server a SQLite

Suelta el script que escribe Generate Scripts de SSMS con esquema y datos, en .sql o .sql.gz, UTF-16 o UTF-8, y descarga un script de SQLite con las mismas tablas, claves, índices y datos. Cada valor que SQLite no puede guardar tal cual, y cada objeto que no admite, aparece en el informe.

Tu archivo
sqlshop_2024_sqlserver.sqlArchivo de ejemplo, 11 kB
Tu base de datos

18 filas convertidas, 3 correcciones, ninguna rechazada

Mostrar

Tablas en shop_2024_sqlserver.sqlVolcado de SQL Server · escrito por SQL Server Management Objects · utf-8

  • orders10 filas2
    11 columnas
    idINTEGER not null
    customer_idINTEGER not null
    statusVARCHAR(10) not null
    totalTEXT not null
    itemsINTEGER not null
    ordered_atDATETIME not null
    shipped_atDATETIME
    noteTEXT
    detailsTEXT
    order_refTEXT not null
    total_with_taxDECIMAL(12,2)
  • customers8 filas1
    8 columnas
    idINTEGER not null
    nameVARCHAR(100) not null
    emailVARCHAR(200) not null
    countryVARCHAR(2) not null
    is_activeINTEGER not null
    signed_upDATE
    created_atTIMESTAMP not null
    row_versionBLOB

Sin convertir

  • Vista paid_orders
  • Disparador orders_no_negative

Cada base de datos los escribe en su propio lenguaje. Reescríbelos para SQLite.

-- Written by IntoSQL from a SQL Server dump. Load it with: sqlite3 -bail <database> < <file>
PRAGMA foreign_keys = OFF;
PRAGMA synchronous = OFF;
BEGIN;

CREATE TABLE orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    customer_id INTEGER NOT NULL,
    status VARCHAR(10) DEFAULT 'pending' NOT NULL,
    total TEXT NOT NULL,
    items INTEGER DEFAULT 1 NOT NULL,
    ordered_at DATETIME NOT NULL,
    shipped_at DATETIME,
    note TEXT,
    details TEXT,
    order_ref TEXT NOT NULL,
    total_with_tax DECIMAL(12,2) GENERATED ALWAYS AS (CAST(total * (1.16) AS NUMERIC)) STORED,
    CONSTRAINT orders_items_check CHECK (items >= 0),
    CONSTRAINT orders_check2 CHECK (status = 'cancelled' OR status = 'shipped' OR status = 'paid' OR status = 'pending'),
    CONSTRAINT orders_check3 CHECK (total >= (0)),
    CONSTRAINT orders_fkey FOREIGN KEY (customer_id) REFERENCES customers (id)
);

CREATE TABLE customers ( -- People who bought at least once
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(200) NOT NULL,
    country VARCHAR(2) DEFAULT 'US' NOT NULL,
    is_active INTEGER DEFAULT 1 NOT NULL,
    signed_up DATE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
    row_version BLOB,
    CONSTRAINT customers_is_active_check CHECK (is_active IN (0, 1))
);

INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00.0000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42.0000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17.0000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00.0000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(5,'Noah O''Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00.0000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00.0000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59.0000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12.0000000');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(1,1,'shipped','129.9000',3,'2024-03-01T10:00:00.0000000','2024-03-02T16:30:00.1234567',NULL,'{"gift": false}','0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(2,2,'paid','54.0000',1,'2024-03-02T11:15:00.0000000',NULL,'Gift wrap 🎁','{"gift": true, "wrap": "red"}','1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(3,1,'cancelled','12.5000',1,'2024-03-03T09:45:00.0000000',NULL,'Customer changed their mind',NULL,'2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(4,4,'shipped','980.0000',12,'2024-03-05T02:10:00.0000000','2024-03-07T08:00:00.0000000','请小心轻放','{"fragile": true}','3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(5,5,'pending','45.7500',2,'2024-03-08T17:20:00.0000000',NULL,'Leave at the door; ring twice',NULL,'4f1e806c-7d5b-4c2e-9a99-5e6f708192a3');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(6,6,'shipped','310.4000',5,'2024-03-10T13:00:00.0000000','2024-03-11T09:00:00.0000000','Fragile: "glass"','{"fragile": true}','50f2917d-8e6c-4d3f-8baa-6f708192a3b4');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(7,8,'paid','76.2000',2,'2024-03-11T18:45:00.0000000',NULL,NULL,NULL,'6103a28e-9f7d-4e40-9cbb-708192a3b4c5');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(8,2,'shipped','19.9900',1,'2024-03-12T08:00:00.0000000','9999-12-31T23:59:59.9999999','Shipped date set to the maximum by an old import',NULL,'7214b39f-a08e-4f51-8dcc-8192a3b4c5d6');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(9,3,'shipped','64.0000',2,'2024-03-14T15:30:00.0000000','2024-03-15T10:00:00.0000000','Two parcels','{"parcels": [1, 2]}','8325c4a0-b19f-4062-9edd-92a3b4c5d6e7');
INSERT INTO orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) VALUES
(10,7,'paid','1499.0000',1,'2024-03-15T21:05:00.0000000',NULL,'C:\Users\ravi\invoice.pdf',NULL,'9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8');

-- Indexes, triggers and counters, after the rows so each index builds once.
CREATE INDEX orders_idx_orders_customer ON orders (customer_id);
CREATE INDEX orders_idx_orders_status_date ON orders (status, ordered_at);
CREATE UNIQUE INDEX customers_email ON customers (email);
UPDATE sqlite_sequence SET seq = max(seq, 0) WHERE name = 'orders';
INSERT INTO sqlite_sequence (name, seq) SELECT 'orders', 0 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'orders');
UPDATE sqlite_sequence SET seq = max(seq, 0) WHERE name = 'customers';
INSERT INTO sqlite_sequence (name, seq) SELECT 'customers', 0 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'customers');
COMMIT;

-- Rows whose foreign key finds no parent, if any: the load doesn't stop for them.
PRAGMA foreign_key_check;

Correcciones

  1. "items" de orders no tiene signo, así que se volvió INTEGER con un CHECK de que no sea negativa.
  2. "total" de orders es money, más dígitos de los que guarda un número de SQLite, así que es texto con cada dígito.
  3. "row_version" de customers es una versión de fila que SQL Server asigna por sí mismo; el volcado no tiene valores para ella, así que es BLOB y queda vacía.

Para revisar

  • 6 columnas de texto comparan sin distinguir mayúsculas en el origen; SQLite compara exactamente, así que las claves únicas y las búsquedas pueden comportarse distinto. Usa una intercalación o un tipo de columna que no distinga mayúsculas en las columnas que lo necesiten.
  • 2 vistas, disparadores, rutinas o eventos no se convierten; el informe lista cada uno. Vuelve a crearlos a mano en SQLite.
  • El CHECK check1 de orders no se puede escribir para SQLite (function isjson), así que no se crea. Escribe el CHECK a mano si es importante.
  • El índice idx_orders_pending de orders usa una expresión que no se puede escribir para SQLite (filtered index), así que no se crea. Crea el índice a mano si las consultas lo necesitan.
  • El valor predeterminado de "order_ref" en orders no se puede escribir para SQLite (function uuid), así que la columna no tiene valor predeterminado. Agrega el valor predeterminado a mano si las filas nuevas lo necesitan.

Tu archivo se convierte en esta computadora y nunca se sube.

Otros ejemplos:

Qué cambia de SQL Server a SQLite

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.

  • bit

    INTEGER 0 o 1 con un CHECK

    SQLite no tiene tipo booleano; su propio true y false son 1 y 0.

  • tinyint

    INTEGER con un CHECK de que no sea negativo

    El tinyint de SQL Server va de 0 a 255; un CHECK conserva su rango.

    Línea del informe: unsigned_widened

  • char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text

    VARCHAR(n) y TEXT, sin aplicar

    SQLite conserva el tipo declarado para que lo lean las herramientas, pero no limita la longitud.

  • decimal(p,s) past 15 digits, money

    TEXT

    SQLite guarda unos 15 dígitos significativos en un número. Los números más anchos se guardan como texto para que cada dígito siga exacto.

    Línea del informe: decimal_as_text

  • date, datetime, datetime2, smalldatetime

    DATETIME como texto ISO 8601, con cada dígito

    SQLite guarda las fechas como texto que leen sus funciones de fecha.

  • datetimeoffset

    TIMESTAMP como texto ISO 8601 en UTC

    SQLite no tiene un tipo que conserve el desfase, así que cada instante se escribe en UTC: el mismo instante sea cual sea el desfase que tenía.

    Línea del informe: moments_as_utc

  • time

    TIME como texto

    SQLite guarda las horas como texto, con cada dígito.

  • dates that aren't valid

    NULL

    Un valor que no es una fecha se vuelve NULL y el informe lo cuenta.

    Línea del informe: date_out_of_range

  • json (SQL Server 2025)

    TEXT

    Los mismos valores JSON, que leen las funciones JSON de SQLite.

  • uniqueidentifier

    TEXT

    Los mismos identificadores, escritos en minúsculas.

  • binary, varbinary, image

    BLOB

    Los bytes siguen siendo bytes.

  • geometry, geography

    BLOB con los bytes propios de SQL Server

    SSMS escribe los valores espaciales en la serialización de SQL Server, que se conserva byte a byte.

    Línea del informe: spatial_as_native

  • rowversion, timestamp

    BLOB, sin valores

    SQL Server asigna la versión de fila por sí mismo y SSMS no escribe valores para ella en el script.

    Línea del informe: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    TEXT

    SQLite no tiene un tipo equivalente; xml y sql_variant conservan el texto de cada valor y hierarchyid su ruta, como /1/2/.

    Línea del informe: type_replaced

  • collations that ignore case (_CI_)

    comparación exacta

    SQLite compara el texto exactamente, salvo que se le indique otra cosa, y su NOCASE solo iguala letras ASCII.

    Línea del informe: case_insensitive_collation

  • IDENTITY

    INTEGER PRIMARY KEY AUTOINCREMENT, siguiendo después del id más alto

    SQLite cuenta una clave primaria entera completa, y AUTOINCREMENT evita que se reutilicen los ids.

  • IDENTITY columns that aren't the whole primary key

    INTEGER sin contador

    SQLite solo cuenta una columna que es toda la clave primaria, así que la columna conserva sus valores y las filas nuevas necesitan los suyos.

    Línea del informe: counter_dropped

  • CREATE SEQUENCE

    no se crea

    SQLite no tiene secuencias. Los valores que entregó una secuencia están en las filas.

    Línea del informe: sequence_not_converted

  • computed columns

    GENERATED ALWAYS AS, STORED cuando son PERSISTED, VIRTUAL en otro caso

    SQLite 3.31 y posteriores las calculan de las mismas dos formas, con CONCAT escrito para que NULL cuente como vacío, como en SQL Server.

  • computed columns with functions SQLite lacks

    una columna simple

    Una fórmula que no se puede escribir deja una columna simple y una línea en el informe; SSMS no escribe valores para las columnas calculadas.

    Línea del informe: generated_not_translated

  • defaults with functions SQLite lacks, and NEXT VALUE FOR

    sin valor predeterminado

    Un valor predeterminado que no se puede escribir se deja fuera y aparece en el informe.

    Línea del informe: default_not_translated

  • CHECK constraints

    traducidos

    Los mismos CHECK, comprobados al cargar cada fila.

  • CHECK constraints with functions SQLite lacks

    no se crea

    Un CHECK que no se puede escribir se deja fuera y aparece en el informe.

    Línea del informe: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    no se crea

    SQL Server no aplica estos CHECK, así que las filas pueden no cumplirlos.

    Línea del informe: check_not_enforced

  • filtered and columnstore indexes

    no se crea

    IntoSQL escribe índices b-tree sobre columnas completas; vuelve a crear los demás después de cargar.

    Línea del informe: index_skipped

  • foreign keys

    en CREATE TABLE, cargadas sin comprobar, luego listadas con PRAGMA foreign_key_check

    SQLite solo acepta claves foráneas en CREATE TABLE y solo las comprueba con PRAGMA foreign_keys activado. Las filas cargan sin comprobar y el script termina listando cada fila sin padre.

  • foreign keys to tables the dump doesn't create

    no se crea

    Una clave no puede nombrar una tabla que no existe.

    Línea del informe: foreign_key_skipped

  • tables on a partition scheme

    una tabla con las filas de todas las particiones

    Las filas son las mismas; vuelve a particionar la tabla en SQLite si lo necesita.

    Línea del informe: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    dos tablas: las filas actuales y el historial

    La tabla y su tabla de historial se copian como tablas simples; SQLite no conserva el historial por sí mismo.

    Línea del informe: system_versioning_dropped

  • schemas

    un archivo, con el nombre del esquema delante de cada tabla

    Un archivo SQLite es una sola base de datos, así que el nombre del esquema distingue las tablas con el mismo nombre; las tablas de dbo conservan sus nombres.

    Línea del informe: schemas_merged

  • NOT NULL columns with values that become NULL

    sin NOT NULL

    Una columna cuyos valores tuvieron que volverse NULL no puede conservar NOT NULL, o la carga se detendría.

    Línea del informe: not_null_relaxed

  • views, functions, procedures, triggers, synonyms, types and partition functions

    listados en el informe

    Su código está escrito en T-SQL, así que se listan para que los vuelvas a crear.

    Línea del informe: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipos leídos de los valores

    Un script solo de datos solo tiene filas, así que los tipos salen de los valores.

    Línea del informe: no_schema

  • expressions in INSERT values

    NULL

    Un convertidor que no ejecuta una base de datos no puede evaluarlas.

    Línea del informe: expression_value

  • types IntoSQL doesn't know

    TEXT

    El texto admite cualquier valor; cambia el tipo después de cargar.

    Línea del informe: unknown_type

  • NUL characters in text

    se conserva

    El texto de SQLite puede contener un carácter NUL, así que el valor se copia tal cual.

  • text that isn't valid in its encoding

    los bytes incorrectos como carácter de reemplazo

    El script es UTF-8 y cada valor tiene que ser texto válido.

    Línea del informe: invalid_utf8_replaced

  • text decoded twice (ñ)

    se copia tal cual

    El script contiene exactamente estos caracteres, así que se copian; el informe los señala.

    Línea del informe: mojibake_suspected

En SQL ServerEn SQLiteLínea del informe
bitINTEGER 0 o 1 con un CHECKSQLite no tiene tipo booleano; su propio true y false son 1 y 0.
tinyintINTEGER con un CHECK de que no sea negativoEl tinyint de SQL Server va de 0 a 255; un CHECK conserva su rango.unsigned_widened
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textVARCHAR(n) y TEXT, sin aplicarSQLite conserva el tipo declarado para que lo lean las herramientas, pero no limita la longitud.
decimal(p,s) past 15 digits, moneyTEXTSQLite guarda unos 15 dígitos significativos en un número. Los números más anchos se guardan como texto para que cada dígito siga exacto.decimal_as_text
date, datetime, datetime2, smalldatetimeDATETIME como texto ISO 8601, con cada dígitoSQLite guarda las fechas como texto que leen sus funciones de fecha.
datetimeoffsetTIMESTAMP como texto ISO 8601 en UTCSQLite no tiene un tipo que conserve el desfase, así que cada instante se escribe en UTC: el mismo instante sea cual sea el desfase que tenía.moments_as_utc
timeTIME como textoSQLite guarda las horas como texto, con cada dígito.
dates that aren't validNULLUn valor que no es una fecha se vuelve NULL y el informe lo cuenta.date_out_of_range
json (SQL Server 2025)TEXTLos mismos valores JSON, que leen las funciones JSON de SQLite.
uniqueidentifierTEXTLos mismos identificadores, escritos en minúsculas.
binary, varbinary, imageBLOBLos bytes siguen siendo bytes.
geometry, geographyBLOB con los bytes propios de SQL ServerSSMS escribe los valores espaciales en la serialización de SQL Server, que se conserva byte a byte.spatial_as_native
rowversion, timestampBLOB, sin valoresSQL Server asigna la versión de fila por sí mismo y SSMS no escribe valores para ella en el script.rowversion_empty
xml, sql_variant, hierarchyid, vectorTEXTSQLite no tiene un tipo equivalente; xml y sql_variant conservan el texto de cada valor y hierarchyid su ruta, como /1/2/.type_replaced
collations that ignore case (_CI_)comparación exactaSQLite compara el texto exactamente, salvo que se le indique otra cosa, y su NOCASE solo iguala letras ASCII.case_insensitive_collation
IDENTITYINTEGER PRIMARY KEY AUTOINCREMENT, siguiendo después del id más altoSQLite cuenta una clave primaria entera completa, y AUTOINCREMENT evita que se reutilicen los ids.
IDENTITY columns that aren't the whole primary keyINTEGER sin contadorSQLite solo cuenta una columna que es toda la clave primaria, así que la columna conserva sus valores y las filas nuevas necesitan los suyos.counter_dropped
CREATE SEQUENCEno se creaSQLite no tiene secuencias. Los valores que entregó una secuencia están en las filas.sequence_not_converted
computed columnsGENERATED ALWAYS AS, STORED cuando son PERSISTED, VIRTUAL en otro casoSQLite 3.31 y posteriores las calculan de las mismas dos formas, con CONCAT escrito para que NULL cuente como vacío, como en SQL Server.
computed columns with functions SQLite lacksuna columna simpleUna fórmula que no se puede escribir deja una columna simple y una línea en el informe; SSMS no escribe valores para las columnas calculadas.generated_not_translated
defaults with functions SQLite lacks, and NEXT VALUE FORsin valor predeterminadoUn valor predeterminado que no se puede escribir se deja fuera y aparece en el informe.default_not_translated
CHECK constraintstraducidosLos mismos CHECK, comprobados al cargar cada fila.
CHECK constraints with functions SQLite lacksno se creaUn CHECK que no se puede escribir se deja fuera y aparece en el informe.check_skipped
CHECK constraints added WITH NOCHECK or disabledno se creaSQL Server no aplica estos CHECK, así que las filas pueden no cumplirlos.check_not_enforced
filtered and columnstore indexesno se creaIntoSQL escribe índices b-tree sobre columnas completas; vuelve a crear los demás después de cargar.index_skipped
foreign keysen CREATE TABLE, cargadas sin comprobar, luego listadas con PRAGMA foreign_key_checkSQLite solo acepta claves foráneas en CREATE TABLE y solo las comprueba con PRAGMA foreign_keys activado. Las filas cargan sin comprobar y el script termina listando cada fila sin padre.
foreign keys to tables the dump doesn't createno se creaUna clave no puede nombrar una tabla que no existe.foreign_key_skipped
tables on a partition schemeuna tabla con las filas de todas las particionesLas filas son las mismas; vuelve a particionar la tabla en SQLite si lo necesita.partitions_dropped
temporal tables (SYSTEM_VERSIONING)dos tablas: las filas actuales y el historialLa tabla y su tabla de historial se copian como tablas simples; SQLite no conserva el historial por sí mismo.system_versioning_dropped
schemasun archivo, con el nombre del esquema delante de cada tablaUn archivo SQLite es una sola base de datos, así que el nombre del esquema distingue las tablas con el mismo nombre; las tablas de dbo conservan sus nombres.schemas_merged
NOT NULL columns with values that become NULLsin NOT NULLUna columna cuyos valores tuvieron que volverse NULL no puede conservar NOT NULL, o la carga se detendría.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionslistados en el informeSu código está escrito en T-SQL, así que se listan para que los vuelvas a crear.not_converted_objects
scripts without CREATE TABLE (data only)tipos leídos de los valoresUn script solo de datos solo tiene filas, así que los tipos salen de los valores.no_schema
expressions in INSERT valuesNULLUn convertidor que no ejecuta una base de datos no puede evaluarlas.expression_value
types IntoSQL doesn't knowTEXTEl texto admite cualquier valor; cambia el tipo después de cargar.unknown_type
NUL characters in textse conservaEl texto de SQLite puede contener un carácter NUL, así que el valor se copia tal cual.
text that isn't valid in its encodinglos bytes incorrectos como carácter de reemplazoEl script es UTF-8 y cada valor tiene que ser texto válido.invalid_utf8_replaced
text decoded twice (ñ)se copia tal cualEl script contiene exactamente estos caracteres, así que se copian; el informe los señala.mojibake_suspected

Carga el script en SQLite

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.

sqlite3 -bail mydb.sqlite < sql_server.sqlite.sql

Las claves foráneas se declaran en cada tabla y las filas se cargan con la comprobación de claves foráneas desactivada. Luego el script lista cada fila que apunta a una fila que no existe, en lugar de fallar a medias.

Para un volcado grande, carga en un archivo nuevo en un disco local. El script carga todo en una sola transacción con la sincronización desactivada, así que va a la velocidad del disco, y una carga que se detiene a medias no deja tablas incompletas.

La línea de comandos carga el archivo directo en una base de datos SQLite, sin escribir un script. Es gratis.

Haz el volcado de SQL Server para el mejor resultado

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

  • En SSMS, haz clic derecho en la base de datos, Tasks, Generate Scripts, y elige las tablas. dbatools, mssql-scripter y otras herramientas basadas en la misma biblioteca escriben el mismo script.
  • En Advanced, cambia Types of data to script a Schema and data. Un script solo del esquema tiene tablas sin filas.
  • Guárdalo como Unicode, el formato predeterminado de SSMS, o como UTF-8: ambos se leen igual, y gzip también funciona.

Qué no se convierte

Las vistas, funciones, procedimientos, disparadores, sinónimos, reglas y políticas de seguridad se escriben en T-SQL. Aparecen en el informe por nombre, nunca se descartan en silencio, para que puedas reescribirlos para SQLite.

Preguntas sobre SQL Server a SQLite

¿No encuentras la respuesta? Escríbenos desde la página de contacto y te responde una persona. Página de contacto

¿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.

¿Lee el archivo UTF-16 que guarda SSMS?

Sí. SSMS guarda los scripts en UTF-16 por defecto, y el convertidor lee UTF-16 y UTF-8 por igual, con gzip o sin él, con GO entre lotes.

¿De qué versiones de SQL Server puede venir el script?

Scripts que SSMS, dbatools o mssql-scripter escriben desde SQL Server 2017 en adelante. Cada script de prueba viene de SQL Server 2017, 2022 y 2025 y se compara con su origen celda por celda.

¿Se conservan los valores IDENTITY?

Una columna IDENTITY que es toda la clave primaria de la tabla se vuelve INTEGER PRIMARY KEY AUTOINCREMENT, cada fila conserva su id y el siguiente id sigue después del más alto. Cualquier otra conserva sus valores sin contador.

¿Qué pasa con money, datetimeoffset y otros tipos de SQL Server?

bit se vuelve 0 y 1, datetime2 texto ISO 8601 con cada dígito, datetimeoffset texto en UTC, y los decimales anchos y money texto exacto. Las columnas calculadas siguen siendo calculadas. Los esquemas se vuelven prefijos del nombre de tabla.

¿Qué pasa con los procedimientos, los disparadores y las vistas?

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 SQLite carga el script?

SQLite 3.31 y posteriores. Cada script de prueba carga en 3.31 y 3.54, y se detiene en el primer error si algo sale mal.