Konversi SQLite ke SQL Server
Letakkan file database SQLite (.db, .sqlite, .sqlite3) atau SQL yang ditulis .dump milik sqlite3, lalu unduh skrip SQL Server dengan tabel, kunci, indeks, dan data yang sama. Setiap kolom mendapat tipe yang memuat nilainya, dan setiap nilai yang tidak bisa disimpan SQL Server apa adanya dicantumkan di laporan.
18 baris dikonversi, tanpa perbaikan, tidak ada yang ditolak
Tabel di shop_2024_sqlite.sqlDump SQLite · ditulis oleh sqlite3 · utf-8
customers8 baris
7 kolom 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 baris
9 kolom 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)
Tidak dikonversi
- View order_totals
- Trigger orders_shipped
Setiap database menulis objek ini dalam bahasanya sendiri. Tulis ulang untuk 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
Perbaikan
Tidak ada yang perlu diperbaiki.
Perlu diperiksa
- 2 view, trigger, rutin, atau event tidak dikonversi; laporan mencantumkan masing-masing. Buat ulang secara manual di SQL Server.
- CHECK check1 pada customers tidak bisa ditulis untuk SQL Server (function char_length), jadi tidak dibuat. Tulis CHECK secara manual jika penting.
File Anda dikonversi di komputer ini dan tidak pernah diunggah.
Contoh lain:
Yang berubah dari SQLite ke SQL Server
Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.
declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none)
tipe yang memuat setiap nilai di kolom
SQLite menyimpan nilai apa pun di kolom mana pun, jadi tipe yang dideklarasikan hanyalah petunjuk: setiap kolom mendapat tipe yang memuat semua nilainya, dan kolom berisi nilai campuran mempertahankan teksnya.
BOOLEAN, BOOL
bit
Jika setiap nilai adalah 0 atau 1; kolom yang juga berisi nilai lain mempertahankannya sebagai angka atau teks.
TEXT, VARCHAR(n), CHAR(n), CLOB
nvarchar(n) atau nvarchar(max)
SQLite tidak pernah menerapkan panjang; panjang yang dideklarasikan hanya berlaku jika setiap nilai muat di dalamnya.
DECIMAL(p,s), NUMERIC
tipe eksak jika setiap nilai muat di dalamnya, selain itu double
SQLite menyimpannya sebagai bilangan bulat atau double; presisi yang dideklarasikan hanya berlaku jika nilainya muat.
BLOB, and columns holding bytes
varbinary(max)
Byte tetap byte; teks dan angka di kolom yang sama disimpan sebagai byte-nya.
DATE, DATETIME, TIMESTAMP holding ISO 8601 text
date, datetime2(p)
Jika setiap nilai adalah tanggal atau tanggal dan waktu; angka epoch dan teks lain mempertahankan nilainya apa adanya.
JSON holding JSON text
nvarchar(max)
Jika setiap nilai adalah objek atau array JSON.
Infinity in REAL columns
NULL
Double di SQL Server tidak punya infinity, jadi nilai itu menjadi NULL dan laporan menghitungnya.
Baris laporan: invalid_value_null
INTEGER PRIMARY KEY, AUTOINCREMENT
IDENTITY, berlanjut setelah id tertinggi atau nilai sqlite_sequence
Hanya kolom yang dideklarasikan persis INTEGER PRIMARY KEY yang menjadi rowid; setiap baris mempertahankan id-nya, dan penghitung mulai setelah id tertinggi yang pernah diberikan.
COLLATE NOCASE
collation yang mengabaikan huruf besar dan kecil
Collation umum SQL Server mengabaikan huruf besar dan kecil di setiap kolom, seperti NOCASE untuk huruf ASCII.
generated columns
kolom terhitung, PERSISTED jika STORED
SQL Server menghitungnya dengan cara yang sama.
generated columns with functions IntoSQL doesn't write, and the || operator
kolom biasa
Rumus yang tidak bisa ditulis menyisakan kolom biasa dan satu baris laporan; dump tidak berisi nilai untuk kolom generated.
Baris laporan: generated_not_translated
defaults with functions IntoSQL doesn't write (strftime, randomblob)
tanpa default
Default yang tidak bisa ditulis dihilangkan dan dilaporkan; CURRENT_TIMESTAMP dan datetime('now') tetap ditulis.
Baris laporan: default_not_translated
CHECK constraints
diterjemahkan
CHECK yang sama, diuji saat setiap baris dimuat.
CHECK constraints with functions IntoSQL doesn't write
tidak dibuat
CHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.
Baris laporan: check_skipped
partial and expression indexes
tidak dibuat
IntoSQL menulis indeks pada kolom utuh; buat ulang indeks lainnya setelah pemuatan.
Baris laporan: index_skipped
foreign keys (unenforced unless PRAGMA foreign_keys=ON)
setelah data WITH NOCHECK, lalu diperiksa
SQLite hanya memeriksa foreign key jika diminta, jadi baris tanpa induk sering ada: baris itu dimuat, dan key dibiarkan tidak diperiksa dengan peringatan, bukan menghentikan pemuatan.
ON DELETE or ON UPDATE that cascades in a cycle or along a second path
NO ACTION
SQL Server menolak cascade yang bisa mencapai satu tabel dua kali.
Baris laporan: foreign_key_action_dropped
VARCHAR(n) holding characters past U+FFFF (emoji)
nvarchar(2n), atau nvarchar(max) jika lebih dari 4000
nvarchar menghitung unit UTF-16 dan satu emoji memakai dua, jadi kolom mendapat ruang untuk setiap nilai.
Baris laporan: text_length_widened
foreign keys to tables the dump doesn't create
tidak dibuat
Key tidak bisa merujuk ke tabel yang tidak ada.
Baris laporan: foreign_key_skipped
primary keys holding NULL, and NOT NULL columns with values that become NULL
NOT NULL dihapus
SQLite membolehkan primary key selain rowid berisi NULL; kolom itu tidak bisa NOT NULL di tujuan, atau pemuatan akan berhenti.
Baris laporan: not_null_relaxed
views, triggers and virtual tables (FTS, R*Tree)
dicantumkan di laporan
Kodenya ditulis dalam bahasa SQLite sendiri, dan tabel virtual membutuhkan modul SQLite; semuanya dicantumkan agar Anda bisa membuatnya ulang. Tabel internalnya tidak disalin.
Baris laporan: not_converted_objects
dumps without CREATE TABLE (--data-only)
tipe dibaca dari nilai
Dump yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai dan kolomnya diberi nomor.
Baris laporan: no_schema
expressions in INSERT values other than the text functions dumps write
NULL
unistr(), replace(), char(), dan || dievaluasi sebagaimana shell menulisnya; ekspresi lain tidak bisa dievaluasi tanpa database.
Baris laporan: expression_value
NUL characters in text
dipertahankan
Shell sqlite3 dan Python memotong teks di karakter NUL saat membuat dump, jadi hanya bagian sebelumnya yang ada di dump.
text that isn't valid UTF-8
byte yang rusak menjadi karakter pengganti
Dump menulis teks seperti itu sebagai byte mentah; skripnya berupa UTF-8.
Baris laporan: invalid_utf8_replaced
text decoded twice (ñ)
disalin apa adanya
Dump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.
Baris laporan: mojibake_suspected
| Di SQLite | Di SQL Server | Baris laporan |
|---|---|---|
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | tipe yang memuat setiap nilai di kolomSQLite menyimpan nilai apa pun di kolom mana pun, jadi tipe yang dideklarasikan hanyalah petunjuk: setiap kolom mendapat tipe yang memuat semua nilainya, dan kolom berisi nilai campuran mempertahankan teksnya. | |
| BOOLEAN, BOOL | bitJika setiap nilai adalah 0 atau 1; kolom yang juga berisi nilai lain mempertahankannya sebagai angka atau teks. | |
| TEXT, VARCHAR(n), CHAR(n), CLOB | nvarchar(n) atau nvarchar(max)SQLite tidak pernah menerapkan panjang; panjang yang dideklarasikan hanya berlaku jika setiap nilai muat di dalamnya. | |
| DECIMAL(p,s), NUMERIC | tipe eksak jika setiap nilai muat di dalamnya, selain itu doubleSQLite menyimpannya sebagai bilangan bulat atau double; presisi yang dideklarasikan hanya berlaku jika nilainya muat. | |
| BLOB, and columns holding bytes | varbinary(max)Byte tetap byte; teks dan angka di kolom yang sama disimpan sebagai byte-nya. | |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | date, datetime2(p)Jika setiap nilai adalah tanggal atau tanggal dan waktu; angka epoch dan teks lain mempertahankan nilainya apa adanya. | |
| JSON holding JSON text | nvarchar(max)Jika setiap nilai adalah objek atau array JSON. | |
| Infinity in REAL columns | NULLDouble di SQL Server tidak punya infinity, jadi nilai itu menjadi NULL dan laporan menghitungnya. | invalid_value_null |
| INTEGER PRIMARY KEY, AUTOINCREMENT | IDENTITY, berlanjut setelah id tertinggi atau nilai sqlite_sequenceHanya kolom yang dideklarasikan persis INTEGER PRIMARY KEY yang menjadi rowid; setiap baris mempertahankan id-nya, dan penghitung mulai setelah id tertinggi yang pernah diberikan. | |
| COLLATE NOCASE | collation yang mengabaikan huruf besar dan kecilCollation umum SQL Server mengabaikan huruf besar dan kecil di setiap kolom, seperti NOCASE untuk huruf ASCII. | |
| generated columns | kolom terhitung, PERSISTED jika STOREDSQL Server menghitungnya dengan cara yang sama. | |
| generated columns with functions IntoSQL doesn't write, and the || operator | kolom biasaRumus yang tidak bisa ditulis menyisakan kolom biasa dan satu baris laporan; dump tidak berisi nilai untuk kolom generated. | generated_not_translated |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | tanpa defaultDefault yang tidak bisa ditulis dihilangkan dan dilaporkan; CURRENT_TIMESTAMP dan datetime('now') tetap ditulis. | default_not_translated |
| CHECK constraints | diterjemahkanCHECK yang sama, diuji saat setiap baris dimuat. | |
| CHECK constraints with functions IntoSQL doesn't write | tidak dibuatCHECK yang tidak bisa ditulis dihilangkan dan dilaporkan. | check_skipped |
| partial and expression indexes | tidak dibuatIntoSQL menulis indeks pada kolom utuh; buat ulang indeks lainnya setelah pemuatan. | index_skipped |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | setelah data WITH NOCHECK, lalu diperiksaSQLite hanya memeriksa foreign key jika diminta, jadi baris tanpa induk sering ada: baris itu dimuat, dan key dibiarkan tidak diperiksa dengan peringatan, bukan menghentikan pemuatan. | |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTIONSQL Server menolak cascade yang bisa mencapai satu tabel dua kali. | foreign_key_action_dropped |
| VARCHAR(n) holding characters past U+FFFF (emoji) | nvarchar(2n), atau nvarchar(max) jika lebih dari 4000nvarchar menghitung unit UTF-16 dan satu emoji memakai dua, jadi kolom mendapat ruang untuk setiap nilai. | text_length_widened |
| foreign keys to tables the dump doesn't create | tidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada. | foreign_key_skipped |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL dihapusSQLite membolehkan primary key selain rowid berisi NULL; kolom itu tidak bisa NOT NULL di tujuan, atau pemuatan akan berhenti. | not_null_relaxed |
| views, triggers and virtual tables (FTS, R*Tree) | dicantumkan di laporanKodenya ditulis dalam bahasa SQLite sendiri, dan tabel virtual membutuhkan modul SQLite; semuanya dicantumkan agar Anda bisa membuatnya ulang. Tabel internalnya tidak disalin. | not_converted_objects |
| dumps without CREATE TABLE (--data-only) | tipe dibaca dari nilaiDump yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai dan kolomnya diberi nomor. | no_schema |
| expressions in INSERT values other than the text functions dumps write | NULLunistr(), replace(), char(), dan || dievaluasi sebagaimana shell menulisnya; ekspresi lain tidak bisa dievaluasi tanpa database. | expression_value |
| NUL characters in text | dipertahankanShell sqlite3 dan Python memotong teks di karakter NUL saat membuat dump, jadi hanya bagian sebelumnya yang ada di dump. | |
| text that isn't valid UTF-8 | byte yang rusak menjadi karakter penggantiDump menulis teks seperti itu sebagai byte mentah; skripnya berupa UTF-8. | invalid_utf8_replaced |
| text decoded twice (ñ) | disalin apa adanyaDump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya. | mojibake_suspected |
Muat skrip ke SQL Server
Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.
sqlcmd -b -f 65001 -S localhost -d mydb -i sqlite.sql_server.sqlForeign key ditambahkan WITH NOCHECK lalu diperiksa. Jika sebuah baris merujuk ke baris yang tidak ada, skrip menyebutkan constraint mana dan membiarkannya tidak diperiksa, bukan gagal di tengah jalan.
Untuk dump yang besar, jalankan sqlcmd di mesin yang sama dengan server. Setiap batch berisi maksimal 1000 baris di-commit sendiri, jadi log transaksi tetap kecil.
Buat dump SQLite untuk hasil terbaik
Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:
- File database itu sendiri dikonversi apa adanya, dibaca halaman demi halaman di browser Anda. Tutup dulu aplikasi yang menulis ke file itu, agar tidak ada perubahan yang tertinggal di file -wal-nya.
- sqlite3 app.db .dump > app.sql menulis database yang sama sebagai SQL, yang juga bisa dikonversi, sebagai .sql atau .sql.gz.
- DB Browser for SQLite menulis SQL itu lewat File, Export, Database to SQL file, begitu juga iterdump() di Python.
Yang tidak dikonversi
View dan trigger ditulis dalam bahasa SQLite sendiri. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk SQL Server. Tabel virtual, seperti FTS5 dan R*Tree, juga dicantumkan, dan tabel bayangannya tidak disertakan.
Pertanyaan tentang SQLite ke SQL Server
Tidak terjawab di sini? Tulis ke kami dari halaman kontak, dan seseorang akan membalas. Halaman kontak
Apakah dump saya diunggah?
Tidak. Konverter berjalan di browser Anda dan membaca dump dari disk Anda sepotong demi sepotong, jadi dump tidak pernah meninggalkan komputer Anda. Aplikasi desktop dan command line juga mengonversi di komputer Anda.
Seberapa besar dump yang bisa dipakai?
Konverter tidak pernah menyimpan seluruh dump di memori: file dibaca dua kali, per rentang, dan skrip ditulis sambil berjalan. Dump berukuran beberapa gigabyte bisa dikonversi di browser, di aplikasi desktop, dan dengan command line.
Bisakah saya mengonversi file .db secara langsung?
Ya. Letakkan file .db, .sqlite, atau .sqlite3: file dibaca di browser Anda dan tidak pernah diunggah. Teks dengan karakter NUL dan setiap digit nilai double tiba persis seperti tersimpan, sesuatu yang bisa terpotong oleh .dump.
Dump dari versi SQLite mana yang bisa dipakai?
File database dari SQLite 3.0 ke atas, dalam UTF-8 atau UTF-16, serta dump dari .dump di shell sqlite3 atau dari iterdump() di Python. Setiap file dan dump uji berasal dari sqlite3 3.31 sampai 3.54, termasuk tabel STRICT dan WITHOUT ROWID, dan dibandingkan dengan sumbernya sel demi sel.
Bagaimana tipe kolom ditentukan jika SQLite tidak menerapkannya?
Tipe yang dideklarasikan hanyalah petunjuk dan nilainya yang menentukan: kolom menjadi bigint, decimal, float, date, datetime2, bit, varbinary, atau nvarchar jika setiap nilai muat di dalamnya. Teks dibandingkan secara persis, seperti di SQLite, dan COLLATE NOCASE mengabaikan huruf besar dan kecil.
Apakah INTEGER PRIMARY KEY dan AUTOINCREMENT dipertahankan?
Ya. INTEGER PRIMARY KEY menjadi kolom IDENTITY, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi, atau setelah nilai sqlite_sequence dengan AUTOINCREMENT.
Bagaimana dengan view dan trigger?
Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri.
Di versi SQL Server mana skrip bisa dimuat?
SQL Server 2017 sampai 2025. Skrip yang sama dimuat di setiap versi itu, dan berhenti di galat pertama jika ada yang salah.