Convierte SQLite a SQL Server
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.
18 filas convertidas, sin correcciones, ninguna rechazada
Tablas en shop_2024_sqlite.sqlVolcado de SQLite · escrito por sqlite3 · utf-8
customers8 filas
7 columnas id bigint not null name nvarchar(max) not null email nvarchar(450) not null country nvarchar(max) not null is_active bit not null signed_up date created_at datetime2(0) not null orders10 filas
9 columnas id bigint not null customer_id bigint not null status nvarchar(450) not null total decimal(10,2) not null items int not null ordered_at datetime2(0) not null shipped_at datetime2(0) note nvarchar(max) receipt varbinary(max)
Sin convertir
- Vista order_totals
- Disparador orders_shipped
Cada base de datos los escribe en su propio lenguaje. Reescríbelos para SQL Server.
-- Written by IntoSQL from a SQLite dump. Load it with: sqlcmd -b -f 65001 -d <database> -i <file>
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
SET ARITHABORT ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET NUMERIC_ROUNDABORT OFF;
GO
CREATE TABLE [dbo].[customers] (
[id] bigint IDENTITY(9, 1) NOT NULL,
[name] nvarchar(max) COLLATE Latin1_General_100_BIN2 NOT NULL,
[email] nvarchar(450) COLLATE Latin1_General_100_CI_AS_SC NOT NULL,
[country] nvarchar(max) COLLATE Latin1_General_100_BIN2 DEFAULT N'US' NOT NULL,
[is_active] bit DEFAULT 1 NOT NULL,
[signed_up] date NULL,
[created_at] datetime2(0) DEFAULT SYSDATETIME() NOT NULL,
CONSTRAINT [PK_customers] PRIMARY KEY ([id])
);
GO
CREATE TABLE [dbo].[orders] (
[id] bigint IDENTITY(11, 1) NOT NULL,
[customer_id] bigint NOT NULL,
[status] nvarchar(450) COLLATE Latin1_General_100_BIN2 DEFAULT N'pending' NOT NULL,
[total] decimal(10,2) NOT NULL,
[items] int DEFAULT 1 NOT NULL,
[ordered_at] datetime2(0) NOT NULL,
[shipped_at] datetime2(0) NULL,
[note] nvarchar(max) COLLATE Latin1_General_100_BIN2 NULL,
[receipt] varbinary(max) NULL,
CONSTRAINT [check1] CHECK ([status] IN (N'pending', N'paid', N'shipped', N'cancelled')),
CONSTRAINT [PK_orders] PRIMARY KEY ([id])
);
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(1,N'Ana Martínez',N'ana@example.com',N'MX',1,'2023-01-15','2023-01-15 10:24:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(2,N'Zoë Müller',N'zoe@example.de',N'DE',1,'2023-02-03','2023-02-03 08:11:42');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(3,N'José Peña',N'jose@example.es',N'ES',0,'2023-03-21','2023-03-21 19:05:17');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(4,N'李雷',N'lilei@example.cn',N'CN',1,'2023-05-09','2023-05-09 02:40:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(5,N'Noah O''Brien',N'noah@example.ie',N'IE',1,NULL,'2023-06-30 14:00:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(6,N'Amélie Laurent',N'amelie@example.fr',N'FR',1,'2024-01-02','2024-01-02 09:30:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(7,N'Ravi Patel',N'ravi@example.in',N'IN',0,'2024-02-29','2024-02-29 23:59:59');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(8,N'Sofia Rossi 🌻',N'sofia@example.it',N'IT',1,'2024-04-12','2024-04-12 12:12:12');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(1,1,N'shipped',129.9,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(2,2,N'paid',54,1,'2024-03-02 11:15:00',NULL,N'Gift wrap 🎁',NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(3,1,N'cancelled',12.5,1,'2024-03-03 09:45:00',NULL,N'Customer changed their mind',NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(4,4,N'shipped',980,12,'2024-03-05 02:10:00','2024-03-07 08:00:00',N'请小心轻放',0x25504446);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(5,5,N'pending',45.75,2,'2024-03-08 17:20:00',NULL,CAST(N'' AS nvarchar(max))+N'Leave at the door;'+NCHAR(10)+N'ring twice',NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(6,6,N'shipped',310.4,5,'2024-03-10 13:00:00','2024-03-11 09:00:00',N'Fragile: "glass"',NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(7,8,N'paid',76.2,2,'2024-03-11 18:45:00',NULL,NULL,NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(8,2,N'paid',19.99,1,'2024-03-12 08:00:00',NULL,N'Paid at the counter',NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(9,3,N'shipped',64,2,'2024-03-14 15:30:00',NULL,N'Shipping date never recorded',NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [receipt]) VALUES
(10,7,N'paid',1499,1,'2024-03-15 21:05:00',NULL,N'C:\Users\ravi\invoice.pdf',NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
-- Indexes, foreign keys, counters and triggers, after the rows.
CREATE UNIQUE INDEX [email] ON [dbo].[customers] ([email]);
CREATE INDEX [idx_orders_customer] ON [dbo].[orders] ([customer_id]);
CREATE INDEX [idx_orders_status_date] ON [dbo].[orders] ([status], [ordered_at]);
ALTER TABLE [dbo].[orders] WITH NOCHECK ADD CONSTRAINT [FK_orders] FOREIGN KEY ([customer_id]) REFERENCES [dbo].[customers] ([id]) ON DELETE CASCADE;
BEGIN TRY ALTER TABLE [dbo].[orders] WITH CHECK CHECK CONSTRAINT [FK_orders]; END TRY BEGIN CATCH PRINT N'Foreign key ' + N'[FK_orders]' + N' has rows without a parent: it stays unchecked, and new rows are checked.'; END CATCH;
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[customers]); IF @next IS NOT NULL BEGIN IF @next < 8 SET @next = 8; DBCC CHECKIDENT (N'[dbo].[customers]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[orders]); IF @next IS NOT NULL BEGIN IF @next < 10 SET @next = 10; DBCC CHECKIDENT (N'[dbo].[orders]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
GO
Correcciones
No hubo nada que corregir.
Para revisar
- 2 vistas, disparadores, rutinas o eventos no se convierten; el informe lista cada uno. Vuelve a crearlos a mano en SQL Server.
- El CHECK check1 de customers no se puede escribir para SQL Server (function char_length), así que no se crea. Escribe el CHECK a mano si es importante.
Tu archivo se convierte en esta computadora y nunca se sube.
Otros ejemplos:
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.
declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none)
el tipo en el que caben todos los valores de la columna
SQLite guarda cualquier valor en cualquier columna, así que el tipo declarado es una pista: cada columna recibe el tipo en el que caben todos sus valores, y una columna con valores mezclados conserva su texto.
BOOLEAN, BOOL
bit
Cuando cada valor es 0 o 1; una columna que también tiene otros valores los conserva como números o texto.
TEXT, VARCHAR(n), CHAR(n), CLOB
nvarchar(n) o nvarchar(max)
SQLite nunca aplica una longitud; una longitud declarada se mantiene solo cuando cada valor cabe en ella.
DECIMAL(p,s), NUMERIC
el tipo exacto cuando cada valor cabe en él, si no un double
SQLite los guarda como enteros o doubles; una precisión declarada se mantiene solo cuando los valores caben en ella.
BLOB, and columns holding bytes
varbinary(max)
Los bytes siguen siendo bytes; el texto y los números de la misma columna se conservan como sus bytes.
DATE, DATETIME, TIMESTAMP holding ISO 8601 text
date, datetime2(p)
Cuando cada valor es una fecha o una fecha con hora; los números epoch y el resto del texto conservan sus valores tal cual.
JSON holding JSON text
nvarchar(max)
Cuando cada valor es un objeto o un arreglo JSON.
Infinity in REAL columns
NULL
Los doubles de SQL Server no tienen infinito, así que esos valores se vuelven NULL y el informe los cuenta.
Línea del informe: invalid_value_null
INTEGER PRIMARY KEY, AUTOINCREMENT
IDENTITY, siguiendo después del id más alto o del valor de sqlite_sequence
Solo una columna declarada exactamente INTEGER PRIMARY KEY es el rowid; cada fila conserva su id, y el contador empieza después del id más alto que se haya asignado.
COLLATE NOCASE
una intercalación que no distingue mayúsculas
La intercalación habitual de SQL Server no distingue mayúsculas en ninguna columna, como hacía NOCASE con las letras ASCII.
generated columns
columnas calculadas, PERSISTED cuando son STORED
SQL Server las calcula de la misma forma.
generated columns with functions IntoSQL doesn't write, and the || operator
una columna simple
Una fórmula que no se puede escribir deja una columna simple y una línea en el informe; el volcado no tiene valores para las columnas generadas.
Línea del informe: generated_not_translated
defaults with functions IntoSQL doesn't write (strftime, randomblob)
sin valor predeterminado
Un valor predeterminado que no se puede escribir se deja fuera y aparece en el informe; CURRENT_TIMESTAMP y datetime('now') sí se escriben.
Línea del informe: default_not_translated
CHECK constraints
traducidos
Los mismos CHECK, comprobados al cargar cada fila.
CHECK constraints with functions IntoSQL doesn't write
no se crea
Un CHECK que no se puede escribir se deja fuera y aparece en el informe.
Línea del informe: check_skipped
partial and expression indexes
no se crea
IntoSQL escribe índices sobre columnas completas; vuelve a crear los demás después de cargar.
Línea del informe: index_skipped
foreign keys (unenforced unless PRAGMA foreign_keys=ON)
después de los datos, WITH NOCHECK, luego comprobada
SQLite solo comprueba las claves foráneas cuando se le indica, así que las filas sin padre son comunes: se cargan, y la clave queda sin comprobar con una advertencia en lugar de detener la carga.
ON DELETE or ON UPDATE that cascades in a cycle or along a second path
NO ACTION
SQL Server rechaza las propagaciones que podrían llegar dos veces a una tabla.
Línea del informe: foreign_key_action_dropped
VARCHAR(n) holding characters past U+FFFF (emoji)
nvarchar(2n), o nvarchar(max) a partir de 4000
nvarchar cuenta unidades UTF-16 y un emoji ocupa dos, así que la columna tiene espacio para cada valor.
Línea del informe: text_length_widened
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
primary keys holding NULL, and NOT NULL columns with values that become NULL
sin NOT NULL
SQLite deja que una clave primaria distinta del rowid tenga NULL; la columna no puede ser NOT NULL en el destino, o la carga se detendría.
Línea del informe: not_null_relaxed
views, triggers and virtual tables (FTS, R*Tree)
listados en el informe
Su código está escrito en el lenguaje propio de SQLite, y las tablas virtuales necesitan los módulos de SQLite; se listan para que los vuelvas a crear. Sus tablas internas no se copian.
Línea del informe: not_converted_objects
dumps without CREATE TABLE (--data-only)
tipos leídos de los valores
Un volcado solo de datos solo tiene filas, así que los tipos salen de los valores y las columnas se numeran.
Línea del informe: no_schema
expressions in INSERT values other than the text functions dumps write
NULL
unistr(), replace(), char() y || se evalúan tal como los escribe el shell; las demás expresiones no se pueden evaluar sin una base de datos.
Línea del informe: expression_value
NUL characters in text
se conserva
El shell sqlite3 y Python cortan el texto en un carácter NUL al volcarlo, así que en el volcado solo está lo que lo precede.
text that isn't valid UTF-8
los bytes incorrectos como carácter de reemplazo
Los volcados escriben ese texto como bytes sin procesar; el script es UTF-8.
Línea del informe: invalid_utf8_replaced
text decoded twice (ñ)
se copia tal cual
El volcado contiene exactamente estos caracteres, así que se copian; el informe los señala.
Línea del informe: mojibake_suspected
| 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 columnaSQLite guarda cualquier valor en cualquier columna, así que el tipo declarado es una pista: cada columna recibe el tipo en el que caben todos sus valores, y una columna con valores mezclados conserva su texto. | |
| BOOLEAN, BOOL | bitCuando cada valor es 0 o 1; una columna que también tiene otros valores los conserva como números o texto. | |
| TEXT, VARCHAR(n), CHAR(n), CLOB | nvarchar(n) o nvarchar(max)SQLite nunca aplica una longitud; una longitud declarada se mantiene solo cuando cada valor cabe en ella. | |
| DECIMAL(p,s), NUMERIC | el tipo exacto cuando cada valor cabe en él, si no un doubleSQLite los guarda como enteros o doubles; una precisión declarada se mantiene solo cuando los valores caben en ella. | |
| BLOB, and columns holding bytes | varbinary(max)Los bytes siguen siendo bytes; el texto y los números de la misma columna se conservan como sus bytes. | |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | date, datetime2(p)Cuando cada valor es una fecha o una fecha con hora; los números epoch y el resto del texto conservan sus valores tal cual. | |
| JSON holding JSON text | nvarchar(max)Cuando cada valor es un objeto o un arreglo JSON. | |
| Infinity in REAL columns | NULLLos doubles de SQL Server no tienen infinito, así que esos valores se vuelven NULL y el informe los cuenta. | invalid_value_null |
| INTEGER PRIMARY KEY, AUTOINCREMENT | IDENTITY, siguiendo después del id más alto o del valor de sqlite_sequenceSolo una columna declarada exactamente INTEGER PRIMARY KEY es el rowid; cada fila conserva su id, y el contador empieza después del id más alto que se haya asignado. | |
| COLLATE NOCASE | una intercalación que no distingue mayúsculasLa intercalación habitual de SQL Server no distingue mayúsculas en ninguna columna, como hacía NOCASE con las letras ASCII. | |
| generated columns | columnas calculadas, PERSISTED cuando son STOREDSQL Server las calcula de la misma forma. | |
| generated columns with functions IntoSQL doesn't write, and the || operator | una columna simpleUna fórmula que no se puede escribir deja una columna simple y una línea en el informe; el volcado no tiene valores para las columnas generadas. | generated_not_translated |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | sin valor predeterminadoUn valor predeterminado que no se puede escribir se deja fuera y aparece en el informe; CURRENT_TIMESTAMP y datetime('now') sí se escriben. | default_not_translated |
| CHECK constraints | traducidosLos mismos CHECK, comprobados al cargar cada fila. | |
| CHECK constraints with functions IntoSQL doesn't write | no se creaUn CHECK que no se puede escribir se deja fuera y aparece en el informe. | check_skipped |
| partial and expression indexes | no se creaIntoSQL escribe índices sobre columnas completas; vuelve a crear los demás después de cargar. | index_skipped |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | después de los datos, WITH NOCHECK, luego comprobadaSQLite solo comprueba las claves foráneas cuando se le indica, así que las filas sin padre son comunes: se cargan, y la clave queda sin comprobar con una advertencia en lugar de detener la carga. | |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTIONSQL Server rechaza las propagaciones que podrían llegar dos veces a una tabla. | foreign_key_action_dropped |
| VARCHAR(n) holding characters past U+FFFF (emoji) | nvarchar(2n), o nvarchar(max) a partir de 4000nvarchar cuenta unidades UTF-16 y un emoji ocupa dos, así que la columna tiene espacio para cada valor. | text_length_widened |
| foreign keys to tables the dump doesn't create | no se creaUna clave no puede nombrar una tabla que no existe. | foreign_key_skipped |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | sin NOT NULLSQLite deja que una clave primaria distinta del rowid tenga NULL; la columna no puede ser NOT NULL en el destino, o la carga se detendría. | not_null_relaxed |
| views, triggers and virtual tables (FTS, R*Tree) | listados en el informeSu código está escrito en el lenguaje propio de SQLite, y las tablas virtuales necesitan los módulos de SQLite; se listan para que los vuelvas a crear. Sus tablas internas no se copian. | not_converted_objects |
| dumps without CREATE TABLE (--data-only) | tipos leídos de los valoresUn volcado solo de datos solo tiene filas, así que los tipos salen de los valores y las columnas se numeran. | no_schema |
| expressions in INSERT values other than the text functions dumps write | NULLunistr(), replace(), char() y || se evalúan tal como los escribe el shell; las demás expresiones no se pueden evaluar sin una base de datos. | expression_value |
| NUL characters in text | se conservaEl shell sqlite3 y Python cortan el texto en un carácter NUL al volcarlo, así que en el volcado solo está lo que lo precede. | |
| text that isn't valid UTF-8 | los bytes incorrectos como carácter de reemplazoLos volcados escriben ese texto como bytes sin procesar; el script es UTF-8. | invalid_utf8_replaced |
| text decoded twice (ñ) | se copia tal cualEl volcado contiene exactamente estos caracteres, así que se copian; el informe los señala. | 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.
sqlcmd -b -f 65001 -S localhost -d mydb -i sqlite.sql_server.sqlLas 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
¿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.
¿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.