Langsung ke konten
Beranda IntoSQL

Konversi SQL Server ke SQLite

Letakkan skrip yang ditulis Generate Scripts di SSMS dengan schema dan data, sebagai .sql atau .sql.gz, UTF-16 atau UTF-8, lalu unduh skrip SQLite dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan SQLite apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.

File Anda
sqlshop_2024_sqlserver.sqlFile contoh, 11 kB
Database Anda

18 baris dikonversi, 3 perbaikan, tidak ada yang ditolak

Tampilkan

Tabel di shop_2024_sqlserver.sqlDump SQL Server · ditulis oleh SQL Server Management Objects · utf-8

  • orders10 baris2
    11 kolom
    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 baris1
    8 kolom
    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

Tidak dikonversi

  • View paid_orders
  • Trigger orders_no_negative

Setiap database menulis objek ini dalam bahasanya sendiri. Tulis ulang untuk 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;

Perbaikan

  1. "items" dari orders bersifat unsigned, jadi menjadi INTEGER dengan CHECK bahwa nilainya tidak negatif.
  2. "total" di orders adalah money, digitnya lebih banyak dari yang bisa disimpan angka SQLite, jadi disimpan sebagai teks dengan semua digit.
  3. "row_version" dari customers adalah versi baris yang diatur SQL Server sendiri; dump tidak berisi nilainya, jadi menjadi BLOB dan kosong.

Perlu diperiksa

  • 6 kolom teks di sumber membandingkan tanpa membedakan huruf besar dan kecil; SQLite membandingkan secara persis, jadi kunci unik dan pencarian bisa berperilaku berbeda. Gunakan collation atau tipe kolom yang tidak membedakan huruf besar dan kecil pada kolom yang membutuhkannya.
  • 2 view, trigger, rutin, atau event tidak dikonversi; laporan mencantumkan masing-masing. Buat ulang secara manual di SQLite.
  • CHECK check1 pada orders tidak bisa ditulis untuk SQLite (function isjson), jadi tidak dibuat. Tulis CHECK secara manual jika penting.
  • Indeks idx_orders_pending pada orders memakai ekspresi yang tidak bisa ditulis untuk SQLite (filtered index), jadi tidak dibuat. Buat indeks secara manual jika kueri memerlukannya.
  • Default "order_ref" di orders tidak bisa ditulis untuk SQLite (function uuid), jadi kolom itu tanpa default. Tambahkan default secara manual jika baris baru memerlukannya.

File Anda dikonversi di komputer ini dan tidak pernah diunggah.

Contoh lain:

Yang berubah dari SQL Server ke SQLite

Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.

  • bit

    INTEGER 0 atau 1 dengan CHECK

    SQLite tidak punya tipe boolean; true dan false miliknya adalah 1 dan 0.

  • tinyint

    INTEGER dengan CHECK bahwa nilainya tidak negatif

    tinyint di SQL Server berkisar dari 0 sampai 255; CHECK menjaga rentangnya.

    Baris laporan: unsigned_widened

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

    VARCHAR(n) dan TEXT, tidak diterapkan

    SQLite menyimpan tipe yang dideklarasikan untuk dibaca alat, tetapi tidak membatasi panjangnya.

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

    TEXT

    SQLite menyimpan sekitar 15 digit signifikan dalam angka. Angka yang lebih lebar disimpan sebagai teks agar setiap digit tetap persis.

    Baris laporan: decimal_as_text

  • date, datetime, datetime2, smalldatetime

    DATETIME sebagai teks ISO 8601, setiap digit dipertahankan

    SQLite menyimpan tanggal sebagai teks yang bisa dibaca fungsi tanggalnya.

  • datetimeoffset

    TIMESTAMP sebagai teks ISO 8601 dalam UTC

    SQLite tidak punya tipe yang menyimpan offset, jadi setiap momen ditulis dalam UTC: momen yang sama apa pun offset-nya.

    Baris laporan: moments_as_utc

  • time

    TIME sebagai teks

    SQLite menyimpan waktu sebagai teks, dengan setiap digit.

  • dates that aren't valid

    NULL

    Nilai yang bukan tanggal menjadi NULL dan laporan menghitungnya.

    Baris laporan: date_out_of_range

  • json (SQL Server 2025)

    TEXT

    Nilai JSON yang sama, yang dibaca fungsi JSON di SQLite.

  • uniqueidentifier

    TEXT

    Identifier yang sama, ditulis dengan huruf kecil.

  • binary, varbinary, image

    BLOB

    Byte tetap byte.

  • geometry, geography

    BLOB dengan byte milik SQL Server

    SSMS menulis nilai spasial dalam serialisasi milik SQL Server, yang dipertahankan byte demi byte.

    Baris laporan: spatial_as_native

  • rowversion, timestamp

    BLOB, kosong

    SQL Server mengatur versi baris sendiri dan SSMS tidak menulis nilainya.

    Baris laporan: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    TEXT

    SQLite tidak punya tipe yang setara; xml dan sql_variant mempertahankan teks setiap nilai dan hierarchyid jalurnya, misalnya /1/2/.

    Baris laporan: type_replaced

  • collations that ignore case (_CI_)

    perbandingan persis

    SQLite membandingkan teks secara persis kecuali diminta lain, dan NOCASE-nya hanya berlaku untuk huruf ASCII.

    Baris laporan: case_insensitive_collation

  • IDENTITY

    INTEGER PRIMARY KEY AUTOINCREMENT, berlanjut setelah id tertinggi

    SQLite menghitung primary key bilangan bulat yang utuh, dan AUTOINCREMENT mencegah id dipakai ulang.

  • IDENTITY columns that aren't the whole primary key

    INTEGER tanpa penghitung

    SQLite hanya menghitung kolom yang menjadi seluruh primary key, jadi kolom itu mempertahankan nilainya dan baris baru perlu mengisi nilainya sendiri.

    Baris laporan: counter_dropped

  • CREATE SEQUENCE

    tidak dibuat

    SQLite tidak punya sequence. Nilai yang diberikan sequence ada di baris.

    Baris laporan: sequence_not_converted

  • computed columns

    GENERATED ALWAYS AS, STORED jika PERSISTED, selain itu VIRTUAL

    SQLite 3.31 ke atas menghitungnya dengan dua cara yang sama, dengan CONCAT ditulis agar NULL dihitung sebagai kosong seperti di SQL Server.

  • computed columns with functions SQLite lacks

    kolom biasa

    Rumus yang tidak bisa ditulis menyisakan kolom biasa dan satu baris laporan; SSMS tidak menulis nilai untuk kolom terhitung.

    Baris laporan: generated_not_translated

  • defaults with functions SQLite lacks, and NEXT VALUE FOR

    tanpa default

    Default yang tidak bisa ditulis dihilangkan dan dilaporkan.

    Baris laporan: default_not_translated

  • CHECK constraints

    diterjemahkan

    CHECK yang sama, diuji saat setiap baris dimuat.

  • CHECK constraints with functions SQLite lacks

    tidak dibuat

    CHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.

    Baris laporan: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    tidak dibuat

    SQL Server tidak menerapkan CHECK ini, jadi baris bisa melanggarnya.

    Baris laporan: check_not_enforced

  • filtered and columnstore indexes

    tidak dibuat

    IntoSQL menulis indeks b-tree pada kolom utuh; buat ulang indeks lainnya setelah pemuatan.

    Baris laporan: index_skipped

  • foreign keys

    di CREATE TABLE, dimuat tanpa pemeriksaan, lalu dicantumkan oleh PRAGMA foreign_key_check

    SQLite hanya menerima foreign key di CREATE TABLE dan hanya memeriksanya jika PRAGMA foreign_keys aktif. Baris dimuat tanpa diperiksa dan skrip diakhiri dengan daftar baris tanpa induk.

  • 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

  • tables on a partition scheme

    satu tabel dengan baris dari setiap partisi

    Barisnya sama; partisi ulang tabel di SQLite jika diperlukan.

    Baris laporan: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    dua tabel: baris saat ini dan riwayatnya

    Tabel dan tabel riwayatnya disalin sebagai tabel biasa; SQLite tidak menyimpan riwayat sendiri.

    Baris laporan: system_versioning_dropped

  • schemas

    satu file, nama tabel diawali nama skemanya

    Satu file SQLite adalah satu database, jadi nama schema membedakan tabel yang bernama sama; tabel di dbo mempertahankan namanya.

    Baris laporan: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL dihapus

    Kolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.

    Baris laporan: not_null_relaxed

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

    dicantumkan di laporan

    Kodenya ditulis dalam T-SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.

    Baris laporan: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipe dibaca dari nilai

    Skrip yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.

    Baris laporan: no_schema

  • expressions in INSERT values

    NULL

    Konverter yang tidak menjalankan database tidak bisa mengevaluasinya.

    Baris laporan: expression_value

  • types IntoSQL doesn't know

    TEXT

    Text memuat nilai apa pun; ubah tipenya setelah pemuatan.

    Baris laporan: unknown_type

  • NUL characters in text

    dipertahankan

    Teks SQLite bisa memuat karakter NUL, jadi nilainya disalin apa adanya.

  • text that isn't valid in its encoding

    byte yang rusak menjadi karakter pengganti

    Skripnya UTF-8 dan setiap nilai harus berupa teks yang valid.

    Baris laporan: invalid_utf8_replaced

  • text decoded twice (ñ)

    disalin apa adanya

    Skrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.

    Baris laporan: mojibake_suspected

Di SQL ServerDi SQLiteBaris laporan
bitINTEGER 0 atau 1 dengan CHECKSQLite tidak punya tipe boolean; true dan false miliknya adalah 1 dan 0.
tinyintINTEGER dengan CHECK bahwa nilainya tidak negatiftinyint di SQL Server berkisar dari 0 sampai 255; CHECK menjaga rentangnya.unsigned_widened
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textVARCHAR(n) dan TEXT, tidak diterapkanSQLite menyimpan tipe yang dideklarasikan untuk dibaca alat, tetapi tidak membatasi panjangnya.
decimal(p,s) past 15 digits, moneyTEXTSQLite menyimpan sekitar 15 digit signifikan dalam angka. Angka yang lebih lebar disimpan sebagai teks agar setiap digit tetap persis.decimal_as_text
date, datetime, datetime2, smalldatetimeDATETIME sebagai teks ISO 8601, setiap digit dipertahankanSQLite menyimpan tanggal sebagai teks yang bisa dibaca fungsi tanggalnya.
datetimeoffsetTIMESTAMP sebagai teks ISO 8601 dalam UTCSQLite tidak punya tipe yang menyimpan offset, jadi setiap momen ditulis dalam UTC: momen yang sama apa pun offset-nya.moments_as_utc
timeTIME sebagai teksSQLite menyimpan waktu sebagai teks, dengan setiap digit.
dates that aren't validNULLNilai yang bukan tanggal menjadi NULL dan laporan menghitungnya.date_out_of_range
json (SQL Server 2025)TEXTNilai JSON yang sama, yang dibaca fungsi JSON di SQLite.
uniqueidentifierTEXTIdentifier yang sama, ditulis dengan huruf kecil.
binary, varbinary, imageBLOBByte tetap byte.
geometry, geographyBLOB dengan byte milik SQL ServerSSMS menulis nilai spasial dalam serialisasi milik SQL Server, yang dipertahankan byte demi byte.spatial_as_native
rowversion, timestampBLOB, kosongSQL Server mengatur versi baris sendiri dan SSMS tidak menulis nilainya.rowversion_empty
xml, sql_variant, hierarchyid, vectorTEXTSQLite tidak punya tipe yang setara; xml dan sql_variant mempertahankan teks setiap nilai dan hierarchyid jalurnya, misalnya /1/2/.type_replaced
collations that ignore case (_CI_)perbandingan persisSQLite membandingkan teks secara persis kecuali diminta lain, dan NOCASE-nya hanya berlaku untuk huruf ASCII.case_insensitive_collation
IDENTITYINTEGER PRIMARY KEY AUTOINCREMENT, berlanjut setelah id tertinggiSQLite menghitung primary key bilangan bulat yang utuh, dan AUTOINCREMENT mencegah id dipakai ulang.
IDENTITY columns that aren't the whole primary keyINTEGER tanpa penghitungSQLite hanya menghitung kolom yang menjadi seluruh primary key, jadi kolom itu mempertahankan nilainya dan baris baru perlu mengisi nilainya sendiri.counter_dropped
CREATE SEQUENCEtidak dibuatSQLite tidak punya sequence. Nilai yang diberikan sequence ada di baris.sequence_not_converted
computed columnsGENERATED ALWAYS AS, STORED jika PERSISTED, selain itu VIRTUALSQLite 3.31 ke atas menghitungnya dengan dua cara yang sama, dengan CONCAT ditulis agar NULL dihitung sebagai kosong seperti di SQL Server.
computed columns with functions SQLite lackskolom biasaRumus yang tidak bisa ditulis menyisakan kolom biasa dan satu baris laporan; SSMS tidak menulis nilai untuk kolom terhitung.generated_not_translated
defaults with functions SQLite lacks, and NEXT VALUE FORtanpa defaultDefault yang tidak bisa ditulis dihilangkan dan dilaporkan.default_not_translated
CHECK constraintsditerjemahkanCHECK yang sama, diuji saat setiap baris dimuat.
CHECK constraints with functions SQLite lackstidak dibuatCHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.check_skipped
CHECK constraints added WITH NOCHECK or disabledtidak dibuatSQL Server tidak menerapkan CHECK ini, jadi baris bisa melanggarnya.check_not_enforced
filtered and columnstore indexestidak dibuatIntoSQL menulis indeks b-tree pada kolom utuh; buat ulang indeks lainnya setelah pemuatan.index_skipped
foreign keysdi CREATE TABLE, dimuat tanpa pemeriksaan, lalu dicantumkan oleh PRAGMA foreign_key_checkSQLite hanya menerima foreign key di CREATE TABLE dan hanya memeriksanya jika PRAGMA foreign_keys aktif. Baris dimuat tanpa diperiksa dan skrip diakhiri dengan daftar baris tanpa induk.
foreign keys to tables the dump doesn't createtidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada.foreign_key_skipped
tables on a partition schemesatu tabel dengan baris dari setiap partisiBarisnya sama; partisi ulang tabel di SQLite jika diperlukan.partitions_dropped
temporal tables (SYSTEM_VERSIONING)dua tabel: baris saat ini dan riwayatnyaTabel dan tabel riwayatnya disalin sebagai tabel biasa; SQLite tidak menyimpan riwayat sendiri.system_versioning_dropped
schemassatu file, nama tabel diawali nama skemanyaSatu file SQLite adalah satu database, jadi nama schema membedakan tabel yang bernama sama; tabel di dbo mempertahankan namanya.schemas_merged
NOT NULL columns with values that become NULLNOT NULL dihapusKolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsdicantumkan di laporanKodenya ditulis dalam T-SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.not_converted_objects
scripts without CREATE TABLE (data only)tipe dibaca dari nilaiSkrip yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.no_schema
expressions in INSERT valuesNULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya.expression_value
types IntoSQL doesn't knowTEXTText memuat nilai apa pun; ubah tipenya setelah pemuatan.unknown_type
NUL characters in textdipertahankanTeks SQLite bisa memuat karakter NUL, jadi nilainya disalin apa adanya.
text that isn't valid in its encodingbyte yang rusak menjadi karakter penggantiSkripnya UTF-8 dan setiap nilai harus berupa teks yang valid.invalid_utf8_replaced
text decoded twice (ñ)disalin apa adanyaSkrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.mojibake_suspected

Muat skrip ke SQLite

Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.

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

Foreign key dideklarasikan di setiap tabel dan baris dimuat dengan pemeriksaan foreign key nonaktif. Lalu skrip mencantumkan setiap baris yang merujuk ke baris yang tidak ada, bukan gagal di tengah jalan.

Untuk dump yang besar, muat ke file baru di disk lokal. Skrip memuat semuanya dalam satu transaksi dengan sinkronisasi nonaktif, jadi berjalan secepat disk, dan pemuatan yang berhenti di tengah jalan tidak meninggalkan tabel setengah jadi.

Command line memuat file langsung ke database SQLite, tanpa menulis skrip. Gratis.

Buat dump SQL Server untuk hasil terbaik

Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:

  • Di SSMS, klik kanan database, Tasks, Generate Scripts, lalu pilih tabelnya. dbatools, mssql-scripter, dan alat lain yang dibangun di atas library yang sama menulis skrip yang sama.
  • Di Advanced, atur Types of data to script ke Schema and data. Skrip yang hanya berisi schema punya tabel tanpa baris.
  • Simpan sebagai Unicode, default SSMS, atau sebagai UTF-8: keduanya dibaca dengan cara yang sama, dan gzip juga bisa.

Yang tidak dikonversi

View, fungsi, prosedur, trigger, sinonim, rule, dan kebijakan keamanan ditulis dalam T-SQL. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk SQLite.

Pertanyaan tentang SQL Server ke SQLite

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.

Apakah file UTF-16 yang disimpan SSMS bisa dibaca?

Ya. SSMS menyimpan skrip sebagai UTF-16 secara default, dan konverter membaca UTF-16 dan UTF-8 sama baiknya, di-gzip atau tidak, dengan GO di antara batch.

Skrip dari versi SQL Server mana yang bisa dipakai?

Skrip yang ditulis SSMS, dbatools, atau mssql-scripter dari SQL Server 2017 ke atas. Setiap skrip uji berasal dari SQL Server 2017, 2022, dan 2025 dan dibandingkan dengan sumbernya sel demi sel.

Apakah nilai IDENTITY dipertahankan?

Kolom IDENTITY yang menjadi seluruh primary key tabel menjadi INTEGER PRIMARY KEY AUTOINCREMENT, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi. Kolom lain mempertahankan nilainya tanpa penghitung.

Apa yang terjadi pada money, datetimeoffset, dan tipe SQL Server lainnya?

bit menjadi 0 dan 1, datetime2 menjadi teks ISO 8601 dengan setiap digit, datetimeoffset menjadi teks UTC, dan desimal lebar serta money menjadi teks yang tepat. Kolom terhitung tetap terhitung. Schema menjadi awalan nama tabel.

Bagaimana dengan prosedur, trigger, dan view?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri.

Di versi SQLite mana skrip bisa dimuat?

SQLite 3.31 dan yang lebih baru. Setiap skrip uji dimuat di 3.31 dan 3.54, dan berhenti di galat pertama jika ada yang salah.