İçeriğe geç
IntoSQL ana sayfası

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

Bir SQLite veritabanı dosyasını (.db, .sqlite, .sqlite3) veya sqlite3'ün .dump komutunun yazdığı SQL'i bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir SQL Server betiği indirin. Her sütun, değerlerinin sığdığı türü alır ve SQL Server'in olduğu gibi tutamadığı her değer raporda listelenir.

Dosyanız
sqlshop_2024_sqlite.sqlÖrnek dosya, 3,4 kB
Veritabanınız

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

Göster

shop_2024_sqlite.sql içindeki tablolarSQLite dökümü · sqlite3 ile yazıldı · utf-8

  • customers8 satır
    7 sütun
    idbigint not null
    namenvarchar(max) not null
    emailnvarchar(450) not null
    countrynvarchar(max) not null
    is_activebit not null
    signed_update
    created_atdatetime2(0) not null
  • orders10 satır
    9 sütun
    idbigint not null
    customer_idbigint not null
    statusnvarchar(450) not null
    totaldecimal(10,2) not null
    itemsint not null
    ordered_atdatetime2(0) not null
    shipped_atdatetime2(0)
    notenvarchar(max)
    receiptvarbinary(max)

Dönüştürülmedi

  • Görünüm order_totals
  • Tetikleyici orders_shipped

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

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

Düzeltmeler

Düzeltilecek bir şey yoktu.

Kontrol edilmeli

  • 2 görünüm, tetikleyici, rutin veya olay dönüştürülmedi; rapor her birini listeliyor. Bunları SQL Server'de elle yeniden oluşturun.
  • customers üzerindeki check1 CHECK kısıtı SQL Server için yazılamıyor (function char_length); bu yüzden oluşturulmadı. Önemliyse CHECK kısıtını elle yazın.

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

Diğer örnekler:

SQLite ile SQL Server 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.

  • declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none)

    sütundaki her değerin sığdığı tür

    SQLite her sütunda her değeri tutar, bu yüzden tanımlanan tür bir ipucudur: her sütun, tüm değerlerinin sığdığı türü alır ve karışık değerler içeren bir sütun bunların metnini korur.

  • BOOLEAN, BOOL

    bit

    Her değer 0 veya 1 olduğunda; başka değerler de içeren bir sütun bunları sayı veya metin olarak korur.

  • TEXT, VARCHAR(n), CHAR(n), CLOB

    nvarchar(n) veya nvarchar(max)

    SQLite uzunluğu hiçbir zaman zorunlu tutmaz; tanımlanan uzunluk yalnızca her değer ona sığıyorsa korunur.

  • DECIMAL(p,s), NUMERIC

    her değer sığıyorsa tam tür, değilse double

    SQLite bunları tam sayı veya double olarak saklar; tanımlanan duyarlılık yalnızca değerler ona sığıyorsa korunur.

  • BLOB, and columns holding bytes

    varbinary(max)

    Baytlar bayt olarak kalır; aynı sütundaki metin ve sayılar baytları olarak korunur.

  • DATE, DATETIME, TIMESTAMP holding ISO 8601 text

    date, datetime2(p)

    Her değer bir tarih veya tarih ve saat olduğunda; epoch sayıları ve diğer metinler değerlerini olduğu gibi korur.

  • JSON holding JSON text

    nvarchar(max)

    Her değer bir JSON nesnesi veya dizisi olduğunda.

  • Infinity in REAL columns

    NULL

    SQL Server'ın double türünde sonsuzluk yoktur, bu yüzden bu değerler NULL olur ve rapor onları sayar.

    Rapor satırı: invalid_value_null

  • INTEGER PRIMARY KEY, AUTOINCREMENT

    en yüksek id'den veya sqlite_sequence değerinden sonra devam eden IDENTITY

    Yalnızca tam olarak INTEGER PRIMARY KEY olarak tanımlanan sütun rowid'dir; her satır kendi id'sini korur ve sayaç, şimdiye kadar verilmiş en yüksek id'den sonra başlar.

  • COLLATE NOCASE

    büyük/küçük harf duyarsız bir harmanlama

    SQL Server'ın olağan harmanlaması, NOCASE'in ASCII harfleri için yaptığı gibi, her sütunda büyük/küçük harfi yok sayar.

  • generated columns

    hesaplanan sütunlar, STORED ise PERSISTED

    SQL Server bunları aynı şekilde hesaplar.

  • generated columns with functions IntoSQL doesn't write, and the || operator

    düz bir sütun

    Yazılamayan bir formül düz bir sütun ve raporda bir satır bırakır; dökümde üretilen sütunlar için değer yoktur.

    Rapor satırı: generated_not_translated

  • defaults with functions IntoSQL doesn't write (strftime, randomblob)

    varsayılan değer yok

    Yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır; CURRENT_TIMESTAMP ve datetime('now') yazılı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 IntoSQL doesn't write

    oluşturulmaz

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

    Rapor satırı: check_skipped

  • partial and expression indexes

    oluşturulmaz

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

    Rapor satırı: index_skipped

  • foreign keys (unenforced unless PRAGMA foreign_keys=ON)

    veriden sonra WITH NOCHECK, ardından denetlenir

    SQLite yabancı anahtarları yalnızca istendiğinde denetler, bu yüzden üst satırı olmayan satırlar yaygındır: yüklenirler ve anahtar, yüklemeyi durdurmak yerine bir uyarıyla denetlenmeden bırakılır.

  • ON DELETE or ON UPDATE that cascades in a cycle or along a second path

    NO ACTION

    SQL Server bir tabloya iki kez ulaşabilecek zincirleme işlemleri reddeder.

    Rapor satırı: foreign_key_action_dropped

  • VARCHAR(n) holding characters past U+FFFF (emoji)

    nvarchar(2n), 4000'i aşınca nvarchar(max)

    nvarchar UTF-16 birimlerini sayar ve bir emoji iki birim tutar; bu yüzden sütuna her değer için yer verilir.

    Rapor satırı: text_length_widened

  • 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

  • primary keys holding NULL, and NOT NULL columns with values that become NULL

    NOT NULL kaldırılır

    SQLite, rowid dışındaki bir birincil anahtarın NULL tutmasına izin verir; sütun hedefte NOT NULL olamaz, yoksa yükleme durur.

    Rapor satırı: not_null_relaxed

  • views, triggers and virtual tables (FTS, R*Tree)

    raporda listelenir

    Kodları SQLite'ın kendi dilinde yazılır ve sanal tablolar SQLite'ın modüllerine ihtiyaç duyar; yeniden oluşturabilmeniz için listelenirler. İç tabloları kopyalanmaz.

    Rapor satırı: not_converted_objects

  • dumps without CREATE TABLE (--data-only)

    değerlerden okunan türler

    Yalnızca veri içeren bir dökümde yalnızca satırlar vardır, bu yüzden türler değerlerden gelir ve sütunlar numaralandırılır.

    Rapor satırı: no_schema

  • expressions in INSERT values other than the text functions dumps write

    NULL

    unistr(), replace(), char() ve || kabuğun yazdığı biçimde hesaplanır; diğer ifadeler veritabanı olmadan hesaplanamaz.

    Rapor satırı: expression_value

  • NUL characters in text

    korunur

    sqlite3 kabuğu ve Python, döküm alırken metni bir NUL karakterinde keser, bu yüzden dökümde yalnızca ondan önceki kısım bulunur.

  • text that isn't valid UTF-8

    hatalı baytlar yerine koyma karakteri olarak

    Dökümler bu tür metni ham bayt olarak yazar; betik UTF-8'dir.

    Rapor satırı: invalid_utf8_replaced

  • text decoded twice (ñ)

    olduğu gibi kopyalanır

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

    Rapor satırı: mojibake_suspected

SQLite içindeSQL Server içindeRapor satırı
declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none)sütundaki her değerin sığdığı türSQLite her sütunda her değeri tutar, bu yüzden tanımlanan tür bir ipucudur: her sütun, tüm değerlerinin sığdığı türü alır ve karışık değerler içeren bir sütun bunların metnini korur.
BOOLEAN, BOOLbitHer değer 0 veya 1 olduğunda; başka değerler de içeren bir sütun bunları sayı veya metin olarak korur.
TEXT, VARCHAR(n), CHAR(n), CLOBnvarchar(n) veya nvarchar(max)SQLite uzunluğu hiçbir zaman zorunlu tutmaz; tanımlanan uzunluk yalnızca her değer ona sığıyorsa korunur.
DECIMAL(p,s), NUMERICher değer sığıyorsa tam tür, değilse doubleSQLite bunları tam sayı veya double olarak saklar; tanımlanan duyarlılık yalnızca değerler ona sığıyorsa korunur.
BLOB, and columns holding bytesvarbinary(max)Baytlar bayt olarak kalır; aynı sütundaki metin ve sayılar baytları olarak korunur.
DATE, DATETIME, TIMESTAMP holding ISO 8601 textdate, datetime2(p)Her değer bir tarih veya tarih ve saat olduğunda; epoch sayıları ve diğer metinler değerlerini olduğu gibi korur.
JSON holding JSON textnvarchar(max)Her değer bir JSON nesnesi veya dizisi olduğunda.
Infinity in REAL columnsNULLSQL Server'ın double türünde sonsuzluk yoktur, bu yüzden bu değerler NULL olur ve rapor onları sayar.invalid_value_null
INTEGER PRIMARY KEY, AUTOINCREMENTen yüksek id'den veya sqlite_sequence değerinden sonra devam eden IDENTITYYalnızca tam olarak INTEGER PRIMARY KEY olarak tanımlanan sütun rowid'dir; her satır kendi id'sini korur ve sayaç, şimdiye kadar verilmiş en yüksek id'den sonra başlar.
COLLATE NOCASEbüyük/küçük harf duyarsız bir harmanlamaSQL Server'ın olağan harmanlaması, NOCASE'in ASCII harfleri için yaptığı gibi, her sütunda büyük/küçük harfi yok sayar.
generated columnshesaplanan sütunlar, STORED ise PERSISTEDSQL Server bunları aynı şekilde hesaplar.
generated columns with functions IntoSQL doesn't write, and the || operatordüz bir sütunYazılamayan bir formül düz bir sütun ve raporda bir satır bırakır; dökümde üretilen sütunlar için değer yoktur.generated_not_translated
defaults with functions IntoSQL doesn't write (strftime, randomblob)varsayılan değer yokYazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır; CURRENT_TIMESTAMP ve datetime('now') yazılır.default_not_translated
CHECK constraintsçevrilirAynı CHECK kısıtları, her satır yüklenirken denetlenir.
CHECK constraints with functions IntoSQL doesn't writeoluşturulmazYazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
partial and expression indexesoluşturulmazIntoSQL tüm sütunlar üzerinde indeks yazar; diğerlerini yüklemeden sonra yeniden oluşturun.index_skipped
foreign keys (unenforced unless PRAGMA foreign_keys=ON)veriden sonra WITH NOCHECK, ardından denetlenirSQLite yabancı anahtarları yalnızca istendiğinde denetler, bu yüzden üst satırı olmayan satırlar yaygındır: yüklenirler ve anahtar, yüklemeyi durdurmak yerine bir uyarıyla denetlenmeden bırakılır.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server bir tabloya iki kez ulaşabilecek zincirleme işlemleri reddeder.foreign_key_action_dropped
VARCHAR(n) holding characters past U+FFFF (emoji)nvarchar(2n), 4000'i aşınca nvarchar(max)nvarchar UTF-16 birimlerini sayar ve bir emoji iki birim tutar; bu yüzden sütuna her değer için yer verilir.text_length_widened
foreign keys to tables the dump doesn't createoluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz.foreign_key_skipped
primary keys holding NULL, and NOT NULL columns with values that become NULLNOT NULL kaldırılırSQLite, rowid dışındaki bir birincil anahtarın NULL tutmasına izin verir; sütun hedefte NOT NULL olamaz, yoksa yükleme durur.not_null_relaxed
views, triggers and virtual tables (FTS, R*Tree)raporda listelenirKodları SQLite'ın kendi dilinde yazılır ve sanal tablolar SQLite'ın modüllerine ihtiyaç duyar; yeniden oluşturabilmeniz için listelenirler. İç tabloları kopyalanmaz.not_converted_objects
dumps without CREATE TABLE (--data-only)değerlerden okunan türlerYalnızca veri içeren bir dökümde yalnızca satırlar vardır, bu yüzden türler değerlerden gelir ve sütunlar numaralandırılır.no_schema
expressions in INSERT values other than the text functions dumps writeNULLunistr(), replace(), char() ve || kabuğun yazdığı biçimde hesaplanır; diğer ifadeler veritabanı olmadan hesaplanamaz.expression_value
NUL characters in textkorunursqlite3 kabuğu ve Python, döküm alırken metni bir NUL karakterinde keser, bu yüzden dökümde yalnızca ondan önceki kısım bulunur.
text that isn't valid UTF-8hatalı baytlar yerine koyma karakteri olarakDökümler bu tür metni ham bayt olarak yazar; betik UTF-8'dir.invalid_utf8_replaced
text decoded twice (ñ)olduğu gibi kopyalanırDöküm tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.mojibake_suspected

Betiği SQL Server 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.

sqlcmd -b -f 65001 -S localhost -d mydb -i sqlite.sql_server.sql

Yabancı anahtarlar WITH NOCHECK ile eklenir ve ardından denetlenir. Bir satır var olmayan bir satıra işaret ediyorsa betik, yarı yolda başarısız olmak yerine hangi kısıt olduğunu söyler ve onu denetlenmemiş bırakır.

Büyük bir döküm için sqlcmd'yi sunucuyla aynı makinede çalıştırın. En fazla 1000 satırlık her toplu iş kendi başına işlenir; böylece işlem günlüğü küçük kalır.

En iyi sonuç için SQLite 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:

  • Veritabanı dosyasının kendisi olduğu gibi dönüştürülür ve tarayıcınızda sayfa sayfa okunur. Hiçbir değişiklik -wal dosyasında kalmasın diye önce ona yazan uygulamayı kapatın.
  • sqlite3 app.db .dump > app.sql aynı veritabanını SQL olarak yazar; bu da .sql veya .sql.gz olarak dönüştürülür.
  • DB Browser for SQLite bu SQL'i File, Export, Database to SQL file ile yazar; Python'ın iterdump() fonksiyonu da öyle.

Neler dönüştürülmez

Görünümler ve tetikleyiciler SQLite'in kendi dilinde yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları SQL Server için yeniden yazabilirsiniz. FTS5 ve R*Tree gibi sanal tablolar da listelenir ve bunların gölge tabloları dışarıda bırakılır.

SQLite - SQL Server 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.

.db dosyasının kendisini dönüştürebilir miyim?

Evet. .db, .sqlite veya .sqlite3 dosyasını bırakın: tarayıcınızda okunur ve asla yüklenmez. NUL karakterli metinler ve bir double değerin her basamağı saklandığı gibi gelir; bir .dump bunları kesebilir.

Döküm hangi SQLite sürümlerinden gelebilir?

SQLite 3.0 ve sonrasından UTF-8 veya UTF-16 veritabanı dosyaları ile sqlite3 kabuğunun .dump komutundan veya Python'ın iterdump() fonksiyonundan alınan dökümler. Her test dosyası ve dökümü, STRICT ve WITHOUT ROWID tabloları dahil, sqlite3 3.31 ile 3.54 arasından gelir ve kaynağıyla hücre hücre karşılaştırılır.

SQLite sütun türlerini zorunlu tutmadığında türler nasıl belirlenir?

Tanımlanan tür bir ipucudur, kararı değerler verir: her değer sığıyorsa sütun bigint, decimal, float, date, datetime2, bit, varbinary veya nvarchar olur. Metin SQLite'teki gibi tam karşılaştırılır, COLLATE NOCASE ise büyük/küçük harfi yok sayarak.

INTEGER PRIMARY KEY ve AUTOINCREMENT korunuyor mu?

Evet. INTEGER PRIMARY KEY bir IDENTITY sütunu olur, her satır kendi id'sini korur ve sonraki id en yüksek id'den sonra, AUTOINCREMENT varsa sqlite_sequence değerinden sonra devam eder.

Görünümler ve tetikleyiciler ne olur?

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

Betik hangi SQL Server sürümlerinde yüklenir?

SQL Server 2017 ile 2025 arası. Aynı betik her birinde yüklenir ve bir sorun çıkarsa ilk hatada durur.