İçeriğe geç
IntoSQL ana sayfası

SQL Server - SQLite dönüştürme

SSMS'in Generate Scripts aracının şema ve veriyle yazdığı betiği .sql veya .sql.gz, UTF-16 veya UTF-8 olarak bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir SQLite betiği indirin. SQLite'in olduğu gibi tutamadığı her değer ve taşımadığı her nesne raporda listelenir.

Dosyanız
sqlshop_2024_sqlserver.sqlÖrnek dosya, 11 kB
Veritabanınız

18 satır dönüştürüldü, 3 düzeltme, reddedilen yok

Göster

shop_2024_sqlserver.sql içindeki tablolarSQL Server dökümü · SQL Server Management Objects ile yazıldı · utf-8

  • orders10 satır2
    11 sütun
    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 satır1
    8 sütun
    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

Dönüştürülmedi

  • Görünüm paid_orders
  • Tetikleyici orders_no_negative

Her veritabanı bunları kendi dilinde yazar. Bunları SQLite için yeniden yazın.

-- 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;

Düzeltmeler

  1. orders tablosunun "items" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile INTEGER oldu.
  2. orders tablosunun "total" sütunu money; bu, bir SQLite sayısının tuttuğundan fazla basamak demek, bu yüzden her basamağıyla metin olarak saklanır.
  3. customers tablosunun "row_version" sütunu, SQL Server'ın kendisinin ayarladığı bir satır sürümüdür; dökümde bunun için değer yoktur, bu yüzden BLOB olur ve boş kalır.

Kontrol edilmeli

  • Kaynakta 6 metin sütunu büyük/küçük harf ayırmadan karşılaştırıyor; SQLite tam karşılaştırır, bu yüzden benzersiz anahtarlar ve aramalar farklı davranabilir. Gereken sütunlarda büyük/küçük harf duyarsız bir harmanlama veya sütun türü kullanın.
  • 2 görünüm, tetikleyici, rutin veya olay dönüştürülmedi; rapor her birini listeliyor. Bunları SQLite'de elle yeniden oluşturun.
  • orders üzerindeki check1 CHECK kısıtı SQLite için yazılamıyor (function isjson); bu yüzden oluşturulmadı. Önemliyse CHECK kısıtını elle yazın.
  • orders üzerindeki idx_orders_pending indeksi SQLite için yazılamayan bir ifade kullanıyor (filtered index); bu yüzden oluşturulmadı. Sorgular gerektiriyorsa indeksi elle oluşturun.
  • orders tablosundaki "order_ref" sütununun varsayılan değeri SQLite için yazılamıyor (function uuid); bu yüzden sütunun varsayılan değeri yok. Yeni satırlar gerektiriyorsa varsayılan değeri elle ekleyin.

Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.

Diğer örnekler:

SQL Server ile SQLite arasında neler değişir

Her satır, dönüştürücünün uyguladığı bir kuraldır; yanında, kural verilerinizde bir şeyi değiştirdiğinde yazılan rapor satırı yer alır.

  • bit

    CHECK ile 0 veya 1 INTEGER

    SQLite'ta boolean türü yoktur; kendi true ve false değerleri 1 ve 0'dır.

  • tinyint

    negatif olmadığını denetleyen bir CHECK ile INTEGER

    SQL Server'ın tinyint türü 0 ile 255 arasındadır; bir CHECK aralığı korur.

    Rapor satırı: unsigned_widened

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

    VARCHAR(n) ve TEXT, zorunlu tutulmaz

    SQLite tanımlanan türü araçların okuması için tutar ama uzunluğu sınırlamaz.

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

    TEXT

    SQLite bir sayıda yaklaşık 15 anlamlı basamak tutar. Daha geniş sayılar her basamak tam kalsın diye metin olarak korunur.

    Rapor satırı: decimal_as_text

  • date, datetime, datetime2, smalldatetime

    her basamağı korunan ISO 8601 metni olarak DATETIME

    SQLite tarihleri, tarih fonksiyonlarının okuduğu metin olarak saklar.

  • datetimeoffset

    UTC'de ISO 8601 metni olarak TIMESTAMP

    SQLite'ta farkı koruyan bir tür yoktur, bu yüzden her an UTC'de yazılır: farkı ne olursa olsun an aynıdır.

    Rapor satırı: moments_as_utc

  • time

    metin olarak TIME

    SQLite saatleri her basamağıyla metin olarak tutar.

  • dates that aren't valid

    NULL

    Tarih olmayan bir değer NULL olur ve rapor onu sayar.

    Rapor satırı: date_out_of_range

  • json (SQL Server 2025)

    TEXT

    Aynı JSON değerleri; SQLite'ın JSON fonksiyonları bunları okur.

  • uniqueidentifier

    TEXT

    Aynı tanımlayıcılar, küçük harfle yazılır.

  • binary, varbinary, image

    BLOB

    Baytlar bayt olarak kalır.

  • geometry, geography

    SQL Server'ın kendi baytlarıyla BLOB

    SSMS uzamsal değerleri SQL Server'ın serileştirmesiyle yazar ve bu bayt bayt korunur.

    Rapor satırı: spatial_as_native

  • rowversion, timestamp

    BLOB, boş

    SQL Server satır sürümünü kendisi ayarlar ve SSMS bunun için değer yazmaz.

    Rapor satırı: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    TEXT

    SQLite'ta karşılık gelen bir tür yoktur; xml ve sql_variant her değerin metnini, hierarchyid ise /1/2/ gibi yolunu korur.

    Rapor satırı: type_replaced

  • collations that ignore case (_CI_)

    tam karşılaştırma

    SQLite, aksi belirtilmedikçe metni tam karşılaştırır ve NOCASE yalnızca ASCII harflerini dönüştürür.

    Rapor satırı: case_insensitive_collation

  • IDENTITY

    en yüksek id'den sonra devam eden INTEGER PRIMARY KEY AUTOINCREMENT

    SQLite tek bir tamsayıdan oluşan birincil anahtarı sayar ve AUTOINCREMENT id'lerin yeniden kullanılmasını önler.

  • IDENTITY columns that aren't the whole primary key

    sayaçsız INTEGER

    SQLite yalnızca birincil anahtarın tamamı olan bir sütunu sayar, bu yüzden sütun değerlerini korur ve yeni satırlara değer verilmesi gerekir.

    Rapor satırı: counter_dropped

  • CREATE SEQUENCE

    oluşturulmaz

    SQLite'ta sequence yoktur. Bir sequence'ın verdiği değerler satırlardadır.

    Rapor satırı: sequence_not_converted

  • computed columns

    GENERATED ALWAYS AS, PERSISTED ise STORED, değilse VIRTUAL

    SQLite 3.31 ve sonrası bunları aynı iki şekilde hesaplar; CONCAT, NULL'u SQL Server'daki gibi boş sayacak şekilde yazılır.

  • computed columns with functions SQLite lacks

    düz bir sütun

    Yazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; SSMS hesaplanan sütunlar için değer yazmaz.

    Rapor satırı: generated_not_translated

  • defaults with functions SQLite lacks, and NEXT VALUE FOR

    varsayılan değer yok

    Yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.

    Rapor satırı: default_not_translated

  • CHECK constraints

    çevrilir

    Aynı CHECK kısıtları, her satır yüklenirken denetlenir.

  • CHECK constraints with functions SQLite lacks

    oluşturulmaz

    Yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.

    Rapor satırı: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    oluşturulmaz

    SQL Server bu CHECK kısıtlarını uygulamaz, bu yüzden satırlar onları ihlal edebilir.

    Rapor satırı: check_not_enforced

  • filtered and columnstore indexes

    oluşturulmaz

    IntoSQL tüm sütunlar üzerinde b-tree indeksler yazar; diğerlerini yüklemeden sonra yeniden oluşturun.

    Rapor satırı: index_skipped

  • foreign keys

    CREATE TABLE içinde, denetlenmeden yüklenir, ardından PRAGMA foreign_key_check ile listelenir

    SQLite yabancı anahtarları yalnızca CREATE TABLE içinde kabul eder ve yalnızca PRAGMA foreign_keys açıkken denetler. Satırlar denetlenmeden yüklenir ve betik, üst satırı olmayan her satırı listeleyerek biter.

  • foreign keys to tables the dump doesn't create

    oluşturulmaz

    Bir anahtar, var olmayan bir tabloya başvuramaz.

    Rapor satırı: foreign_key_skipped

  • tables on a partition scheme

    her bölümün satırlarını içeren tek tablo

    Satırlar aynıdır; gerekirse tabloyu SQLite'ta yeniden bölümleyin.

    Rapor satırı: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    iki tablo: mevcut satırlar ve geçmiş

    Tablo ve geçmiş tablosu düz tablolar olarak kopyalanır; SQLite geçmişi kendisi tutmaz.

    Rapor satırı: system_versioning_dropped

  • schemas

    tek dosya, tabloların adı önce şemalarının adıyla başlar

    Bir SQLite dosyası tek bir veritabanıdır, bu yüzden şema adı aynı adlı tabloları ayrı tutar; dbo içindeki tablolar adlarını korur.

    Rapor satırı: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL kaldırılır

    Değerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.

    Rapor satırı: not_null_relaxed

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

    raporda listelenir

    Kodları T-SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.

    Rapor satırı: not_converted_objects

  • scripts without CREATE TABLE (data only)

    değerlerden okunan türler

    Yalnızca veri içeren bir betikte yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.

    Rapor satırı: no_schema

  • expressions in INSERT values

    NULL

    Veritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.

    Rapor satırı: expression_value

  • types IntoSQL doesn't know

    TEXT

    Metin her değeri tutar; yüklemeden sonra türü değiştirin.

    Rapor satırı: unknown_type

  • NUL characters in text

    korunur

    SQLite'ın metni NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.

  • text that isn't valid in its encoding

    hatalı baytlar yerine koyma karakteri olarak

    Betik UTF-8'dir ve her değer geçerli metin olmalıdır.

    Rapor satırı: invalid_utf8_replaced

  • text decoded twice (ñ)

    olduğu gibi kopyalanır

    Betik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.

    Rapor satırı: mojibake_suspected

SQL Server içindeSQLite içindeRapor satırı
bitCHECK ile 0 veya 1 INTEGERSQLite'ta boolean türü yoktur; kendi true ve false değerleri 1 ve 0'dır.
tinyintnegatif olmadığını denetleyen bir CHECK ile INTEGERSQL Server'ın tinyint türü 0 ile 255 arasındadır; bir CHECK aralığı korur.unsigned_widened
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textVARCHAR(n) ve TEXT, zorunlu tutulmazSQLite tanımlanan türü araçların okuması için tutar ama uzunluğu sınırlamaz.
decimal(p,s) past 15 digits, moneyTEXTSQLite bir sayıda yaklaşık 15 anlamlı basamak tutar. Daha geniş sayılar her basamak tam kalsın diye metin olarak korunur.decimal_as_text
date, datetime, datetime2, smalldatetimeher basamağı korunan ISO 8601 metni olarak DATETIMESQLite tarihleri, tarih fonksiyonlarının okuduğu metin olarak saklar.
datetimeoffsetUTC'de ISO 8601 metni olarak TIMESTAMPSQLite'ta farkı koruyan bir tür yoktur, bu yüzden her an UTC'de yazılır: farkı ne olursa olsun an aynıdır.moments_as_utc
timemetin olarak TIMESQLite saatleri her basamağıyla metin olarak tutar.
dates that aren't validNULLTarih olmayan bir değer NULL olur ve rapor onu sayar.date_out_of_range
json (SQL Server 2025)TEXTAynı JSON değerleri; SQLite'ın JSON fonksiyonları bunları okur.
uniqueidentifierTEXTAynı tanımlayıcılar, küçük harfle yazılır.
binary, varbinary, imageBLOBBaytlar bayt olarak kalır.
geometry, geographySQL Server'ın kendi baytlarıyla BLOBSSMS uzamsal değerleri SQL Server'ın serileştirmesiyle yazar ve bu bayt bayt korunur.spatial_as_native
rowversion, timestampBLOB, boşSQL Server satır sürümünü kendisi ayarlar ve SSMS bunun için değer yazmaz.rowversion_empty
xml, sql_variant, hierarchyid, vectorTEXTSQLite'ta karşılık gelen bir tür yoktur; xml ve sql_variant her değerin metnini, hierarchyid ise /1/2/ gibi yolunu korur.type_replaced
collations that ignore case (_CI_)tam karşılaştırmaSQLite, aksi belirtilmedikçe metni tam karşılaştırır ve NOCASE yalnızca ASCII harflerini dönüştürür.case_insensitive_collation
IDENTITYen yüksek id'den sonra devam eden INTEGER PRIMARY KEY AUTOINCREMENTSQLite tek bir tamsayıdan oluşan birincil anahtarı sayar ve AUTOINCREMENT id'lerin yeniden kullanılmasını önler.
IDENTITY columns that aren't the whole primary keysayaçsız INTEGERSQLite yalnızca birincil anahtarın tamamı olan bir sütunu sayar, bu yüzden sütun değerlerini korur ve yeni satırlara değer verilmesi gerekir.counter_dropped
CREATE SEQUENCEoluşturulmazSQLite'ta sequence yoktur. Bir sequence'ın verdiği değerler satırlardadır.sequence_not_converted
computed columnsGENERATED ALWAYS AS, PERSISTED ise STORED, değilse VIRTUALSQLite 3.31 ve sonrası bunları aynı iki şekilde hesaplar; CONCAT, NULL'u SQL Server'daki gibi boş sayacak şekilde yazılır.
computed columns with functions SQLite lacksdüz bir sütunYazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; SSMS hesaplanan sütunlar için değer yazmaz.generated_not_translated
defaults with functions SQLite lacks, and NEXT VALUE FORvarsayılan değer yokYazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.default_not_translated
CHECK constraintsçevrilirAynı CHECK kısıtları, her satır yüklenirken denetlenir.
CHECK constraints with functions SQLite lacksoluşturulmazYazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
CHECK constraints added WITH NOCHECK or disabledoluşturulmazSQL Server bu CHECK kısıtlarını uygulamaz, bu yüzden satırlar onları ihlal edebilir.check_not_enforced
filtered and columnstore indexesoluşturulmazIntoSQL tüm sütunlar üzerinde b-tree indeksler yazar; diğerlerini yüklemeden sonra yeniden oluşturun.index_skipped
foreign keysCREATE TABLE içinde, denetlenmeden yüklenir, ardından PRAGMA foreign_key_check ile listelenirSQLite yabancı anahtarları yalnızca CREATE TABLE içinde kabul eder ve yalnızca PRAGMA foreign_keys açıkken denetler. Satırlar denetlenmeden yüklenir ve betik, üst satırı olmayan her satırı listeleyerek biter.
foreign keys to tables the dump doesn't createoluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz.foreign_key_skipped
tables on a partition schemeher bölümün satırlarını içeren tek tabloSatırlar aynıdır; gerekirse tabloyu SQLite'ta yeniden bölümleyin.partitions_dropped
temporal tables (SYSTEM_VERSIONING)iki tablo: mevcut satırlar ve geçmişTablo ve geçmiş tablosu düz tablolar olarak kopyalanır; SQLite geçmişi kendisi tutmaz.system_versioning_dropped
schemastek dosya, tabloların adı önce şemalarının adıyla başlarBir SQLite dosyası tek bir veritabanıdır, bu yüzden şema adı aynı adlı tabloları ayrı tutar; dbo içindeki tablolar adlarını korur.schemas_merged
NOT NULL columns with values that become NULLNOT NULL kaldırılırDeğerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsraporda listelenirKodları T-SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.not_converted_objects
scripts without CREATE TABLE (data only)değerlerden okunan türlerYalnızca veri içeren bir betikte yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.no_schema
expressions in INSERT valuesNULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.expression_value
types IntoSQL doesn't knowTEXTMetin her değeri tutar; yüklemeden sonra türü değiştirin.unknown_type
NUL characters in textkorunurSQLite'ın metni NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.
text that isn't valid in its encodinghatalı baytlar yerine koyma karakteri olarakBetik UTF-8'dir ve her değer geçerli metin olmalıdır.invalid_utf8_replaced
text decoded twice (ñ)olduğu gibi kopyalanırBetik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.mojibake_suspected

Betiği SQLite veritabanına yükleyin

Betik tabloları oluşturur, satırları kopyalar, ardından anahtarları, indeksleri ve yabancı anahtarları ekler; böylece hızlı yüklenir ve ilk hatada durur.

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

Yabancı anahtarlar her tabloda tanımlanır ve satırlar yabancı anahtar denetimleri kapalıyken yüklenir. Betik ardından, yarı yolda başarısız olmak yerine, var olmayan bir satıra işaret eden her satırı listeler.

Büyük bir döküm için yerel bir diskte yeni bir dosyaya yükleyin. Betik her şeyi senkronizasyon kapalı tek bir işlemde yükler; böylece disk hızında çalışır ve yarı yolda duran bir yükleme yarım tablo bırakmaz.

Komut satırı dosyayı doğrudan bir SQLite veritabanına yükler; betik yazmanız gerekmez. Ücretsizdir.

En iyi sonuç için SQL Server dökümü nasıl alınır

Dönüştürücü, dökümün içerdiğini okur. Bu seçenekler verilerinizin daha fazlasını dökümde tutar:

  • SSMS'te veritabanına sağ tıklayın, Tasks, Generate Scripts'i seçin ve tabloları işaretleyin. dbatools, mssql-scripter ve aynı kitaplık üzerine kurulu diğer araçlar aynı betiği yazar.
  • Advanced altında Types of data to script ayarını Schema and data yapın. Yalnızca şemayı içeren bir betikte tablolar satırsızdır.
  • Betiği SSMS'in varsayılanı olan Unicode ya da UTF-8 olarak kaydedin: ikisi de aynı şekilde okunur, gzip de çalışır.

Neler dönüştürülmez

Görünümler, fonksiyonlar, saklı yordamlar, tetikleyiciler, eş anlamlılar, kurallar ve güvenlik ilkeleri T-SQL ile yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları SQLite için yeniden yazabilirsiniz.

SQL Server - SQLite dönüştürme hakkında sorular

Yanıtınızı bulamadınız mı? İletişim sayfasından bize yazın, bir kişi yanıt verir. İletişim sayfası

Dökümüm yükleniyor mu?

Hayır. Dönüştürücü tarayıcınızda çalışır ve dökümü diskinizden parça parça okur; böylece döküm bilgisayarınızdan hiç çıkmaz. Masaüstü uygulaması ve komut satırı da bilgisayarınızda dönüştürür.

Döküm ne kadar büyük olabilir?

Dönüştürücü dökümün tamamını asla bellekte tutmaz: dosyayı aralıklar halinde iki kez okur ve betiği ilerledikçe yazar. Birkaç gigabaytlık dökümler tarayıcıda, masaüstü uygulamasında ve komut satırıyla dönüştürülür.

SSMS'in kaydettiği UTF-16 dosyasını okuyor mu?

Evet. SSMS betikleri varsayılan olarak UTF-16 kaydeder ve dönüştürücü, gzip'li olsun olmasın, toplu işler arasında GO bulunan UTF-16 ve UTF-8 dosyalarını aynı şekilde okur.

Betik hangi SQL Server sürümlerinden gelebilir?

SSMS, dbatools veya mssql-scripter ile SQL Server 2017 ve sonrasından yazılmış betikler. Her test betiği SQL Server 2017, 2022 ve 2025'ten gelir ve kaynağıyla hücre hücre karşılaştırılır.

IDENTITY değerleri korunuyor mu?

Tablonun birincil anahtarının tamamı olan bir IDENTITY sütunu INTEGER PRIMARY KEY AUTOINCREMENT olur, her satır kendi id'sini korur ve sonraki id en yüksek id'den sonra devam eder. Diğerleri değerlerini sayaçsız korur.

money, datetimeoffset ve diğer SQL Server türleri ne olur?

bit 0 ve 1, datetime2 her basamağıyla ISO 8601 metni, datetimeoffset UTC metni, geniş decimal'lar ve money ise tam metin olur. Hesaplanan sütunlar hesaplanan olarak kalır. Şemalar tablo adı önekleri olur.

Saklı yordamlar, tetikleyiciler ve görünümler ne olur?

Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar.

Betik hangi SQLite sürümlerinde yüklenir?

SQLite 3.31 ve sonrası. Her test betiği 3.31 ve 3.54 üzerinde yüklenir ve bir sorun çıkarsa ilk hatada durur.