本文へスキップ
IntoSQL ホーム

SQLite を SQL Server に変換

SQLite データベースファイル (.db、.sqlite、.sqlite3) または sqlite3 の .dump が書き出す SQL をドロップすると、同じテーブル、キー、インデックス、データを持つ SQL Server スクリプトをダウンロードできます。各列には値が収まる型を付け、SQL Server がそのまま保持できない値はすべてレポートに記載されます。

ファイル
sqlshop_2024_sqlite.sqlサンプルファイル、3.4 KB
データベース

18 行を変換、修正なし、却下なし

表示

shop_2024_sqlite.sql のテーブルSQLite のダンプ · sqlite3 で作成 · utf-8

  • customers8 行
    7 列
    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 行
    9 列
    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)

未変換

  • ビュー order_totals
  • トリガー orders_shipped

これらはデータベースごとに独自の言語で書かれます。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

修正

修正が必要な箇所はありませんでした。

確認が必要

  • 2 件のビュー、トリガー、ルーチン、イベントは変換されません。レポートにそれぞれ記載しています。 SQL Server で手動で作り直してください。
  • customers のチェック制約 check1 は SQL Server 用に書き換えられないため (function char_length)、作成しません。 必要であれば、手動でチェック制約を書いてください。

ファイルはこのコンピューター上で変換され、アップロードされることはありません。

その他のサンプル:

SQLite から SQL Server で変わること

各行はコンバーターが適用するルールです。ルールによってデータが変わったときにレポートに書かれる行も示します。

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

    列のすべての値が収まる型

    SQLite はどの列にもどんな値でも保存できるため、宣言された型は目安です。各列にはすべての値が収まる型を付け、混在した値を持つ列はそのテキストを保ちます。

  • BOOLEAN, BOOL

    bit

    すべての値が 0 か 1 の場合です。ほかの値も含む列は、それらを数値またはテキストとして保ちます。

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

    nvarchar(n) または nvarchar(max)

    SQLite は長さを強制しません。宣言された長さは、すべての値が収まる場合にだけ保ちます。

  • DECIMAL(p,s), NUMERIC

    すべての値が収まれば正確な型、それ以外は double

    SQLite はこれらを整数または double として保存します。宣言された精度は、値が収まる場合にだけ保ちます。

  • BLOB, and columns holding bytes

    varbinary(max)

    バイト列はバイト列のままです。同じ列にあるテキストや数値は、そのバイト列として保ちます。

  • DATE, DATETIME, TIMESTAMP holding ISO 8601 text

    date、datetime2(p)

    すべての値が日付、または日付と時刻の場合です。エポック形式の数値やほかのテキストは、値をそのまま保ちます。

  • JSON holding JSON text

    nvarchar(max)

    すべての値が JSON のオブジェクトまたは配列の場合です。

  • Infinity in REAL columns

    NULL

    SQL Server の double には無限大がないため、それらの値は NULL になり、レポートで件数を示します。

    レポートの行: invalid_value_null

  • INTEGER PRIMARY KEY, AUTOINCREMENT

    IDENTITY、最大の ID または sqlite_sequence の値の後から継続

    rowid になるのは、正確に INTEGER PRIMARY KEY と宣言された列だけです。各行は ID を保ち、カウンターはこれまでに割り当てられた最大の ID の後から始まります。

  • COLLATE NOCASE

    大文字と小文字を区別しない照合順序

    SQL Server の通常の照合順序は、すべての列で大文字と小文字を区別しません。NOCASE が ASCII 文字に対してそうしていたのと同じです。

  • generated columns

    計算列、STORED なら PERSISTED

    SQL Server も同じ方法で計算します。

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

    普通の列

    書き換えられない式は、普通の列とレポートの 1 行になります。ダンプには生成列の値が含まれません。

    レポートの行: generated_not_translated

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

    デフォルト値なし

    書き換えられないデフォルト値は含めず、レポートに記載します。CURRENT_TIMESTAMP と datetime('now') は書き出します。

    レポートの行: default_not_translated

  • CHECK constraints

    変換済み

    チェック制約は同じで、各行の読み込み時に検証します。

  • CHECK constraints with functions IntoSQL doesn't write

    作成しない

    書き換えられないチェック制約は含めず、レポートに記載します。

    レポートの行: check_skipped

  • partial and expression indexes

    作成しない

    IntoSQL が書き出すのは列全体に対するインデックスです。その他は読み込み後に作り直してください。

    レポートの行: index_skipped

  • foreign keys (unenforced unless PRAGMA foreign_keys=ON)

    データの後に WITH NOCHECK で作成してからチェック

    SQLite は指示されたときにしか外部キーをチェックしないため、親のない行はよくあります。それらの行も読み込み、読み込みを止めずにキーを未チェックのまま残して警告します。

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

    NO ACTION

    SQL Server は、同じテーブルに 2 回到達しうるカスケードを拒否します。

    レポートの行: foreign_key_action_dropped

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

    nvarchar(2n)、4000 を超えると nvarchar(max)

    nvarchar は UTF-16 の単位で数え、絵文字は 2 単位を使うため、列にはすべての値が入る長さを確保します。

    レポートの行: text_length_widened

  • foreign keys to tables the dump doesn't create

    作成しない

    キーは存在しないテーブルを参照できません。

    レポートの行: foreign_key_skipped

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

    NOT NULL を削除

    SQLite では rowid 以外の主キーが NULL を持てます。変換先ではその列を NOT NULL にできません。そうすると読み込みが止まります。

    レポートの行: not_null_relaxed

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

    レポートに記載

    コードは SQLite 独自の言語で書かれており、仮想テーブルには SQLite のモジュールが必要です。作り直せるよう一覧にします。内部テーブルはコピーしません。

    レポートの行: not_converted_objects

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

    値から読み取った型

    データのみのダンプには行しかないため、型は値から決まり、列には番号が付きます。

    レポートの行: no_schema

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

    NULL

    unistr()、replace()、char()、|| はシェルが書き出すとおりに評価します。その他の式はデータベースなしでは評価できません。

    レポートの行: expression_value

  • NUL characters in text

    保持

    sqlite3 シェルと Python はダンプ時に NUL 文字でテキストを切り詰めるため、ダンプにはその前の部分しか含まれません。

  • text that isn't valid UTF-8

    不正なバイトを置換文字に

    ダンプはこうしたテキストを生のバイトとして書き出します。スクリプトは UTF-8 です。

    レポートの行: invalid_utf8_replaced

  • text decoded twice (ñ)

    そのままコピー

    ダンプにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。

    レポートの行: mojibake_suspected

SQLite ではSQL Server ではレポートの行
declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none)列のすべての値が収まる型SQLite はどの列にもどんな値でも保存できるため、宣言された型は目安です。各列にはすべての値が収まる型を付け、混在した値を持つ列はそのテキストを保ちます。
BOOLEAN, BOOLbitすべての値が 0 か 1 の場合です。ほかの値も含む列は、それらを数値またはテキストとして保ちます。
TEXT, VARCHAR(n), CHAR(n), CLOBnvarchar(n) または nvarchar(max)SQLite は長さを強制しません。宣言された長さは、すべての値が収まる場合にだけ保ちます。
DECIMAL(p,s), NUMERICすべての値が収まれば正確な型、それ以外は doubleSQLite はこれらを整数または double として保存します。宣言された精度は、値が収まる場合にだけ保ちます。
BLOB, and columns holding bytesvarbinary(max)バイト列はバイト列のままです。同じ列にあるテキストや数値は、そのバイト列として保ちます。
DATE, DATETIME, TIMESTAMP holding ISO 8601 textdate、datetime2(p)すべての値が日付、または日付と時刻の場合です。エポック形式の数値やほかのテキストは、値をそのまま保ちます。
JSON holding JSON textnvarchar(max)すべての値が JSON のオブジェクトまたは配列の場合です。
Infinity in REAL columnsNULLSQL Server の double には無限大がないため、それらの値は NULL になり、レポートで件数を示します。invalid_value_null
INTEGER PRIMARY KEY, AUTOINCREMENTIDENTITY、最大の ID または sqlite_sequence の値の後から継続rowid になるのは、正確に INTEGER PRIMARY KEY と宣言された列だけです。各行は ID を保ち、カウンターはこれまでに割り当てられた最大の ID の後から始まります。
COLLATE NOCASE大文字と小文字を区別しない照合順序SQL Server の通常の照合順序は、すべての列で大文字と小文字を区別しません。NOCASE が ASCII 文字に対してそうしていたのと同じです。
generated columns計算列、STORED なら PERSISTEDSQL Server も同じ方法で計算します。
generated columns with functions IntoSQL doesn't write, and the || operator普通の列書き換えられない式は、普通の列とレポートの 1 行になります。ダンプには生成列の値が含まれません。generated_not_translated
defaults with functions IntoSQL doesn't write (strftime, randomblob)デフォルト値なし書き換えられないデフォルト値は含めず、レポートに記載します。CURRENT_TIMESTAMP と datetime('now') は書き出します。default_not_translated
CHECK constraints変換済みチェック制約は同じで、各行の読み込み時に検証します。
CHECK constraints with functions IntoSQL doesn't write作成しない書き換えられないチェック制約は含めず、レポートに記載します。check_skipped
partial and expression indexes作成しないIntoSQL が書き出すのは列全体に対するインデックスです。その他は読み込み後に作り直してください。index_skipped
foreign keys (unenforced unless PRAGMA foreign_keys=ON)データの後に WITH NOCHECK で作成してからチェックSQLite は指示されたときにしか外部キーをチェックしないため、親のない行はよくあります。それらの行も読み込み、読み込みを止めずにキーを未チェックのまま残して警告します。
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server は、同じテーブルに 2 回到達しうるカスケードを拒否します。foreign_key_action_dropped
VARCHAR(n) holding characters past U+FFFF (emoji)nvarchar(2n)、4000 を超えると nvarchar(max)nvarchar は UTF-16 の単位で数え、絵文字は 2 単位を使うため、列にはすべての値が入る長さを確保します。text_length_widened
foreign keys to tables the dump doesn't create作成しないキーは存在しないテーブルを参照できません。foreign_key_skipped
primary keys holding NULL, and NOT NULL columns with values that become NULLNOT NULL を削除SQLite では rowid 以外の主キーが NULL を持てます。変換先ではその列を NOT NULL にできません。そうすると読み込みが止まります。not_null_relaxed
views, triggers and virtual tables (FTS, R*Tree)レポートに記載コードは SQLite 独自の言語で書かれており、仮想テーブルには SQLite のモジュールが必要です。作り直せるよう一覧にします。内部テーブルはコピーしません。not_converted_objects
dumps without CREATE TABLE (--data-only)値から読み取った型データのみのダンプには行しかないため、型は値から決まり、列には番号が付きます。no_schema
expressions in INSERT values other than the text functions dumps writeNULLunistr()、replace()、char()、|| はシェルが書き出すとおりに評価します。その他の式はデータベースなしでは評価できません。expression_value
NUL characters in text保持sqlite3 シェルと Python はダンプ時に NUL 文字でテキストを切り詰めるため、ダンプにはその前の部分しか含まれません。
text that isn't valid UTF-8不正なバイトを置換文字にダンプはこうしたテキストを生のバイトとして書き出します。スクリプトは UTF-8 です。invalid_utf8_replaced
text decoded twice (ñ)そのままコピーダンプにはまさにこの文字が含まれているため、そのままコピーし、レポートで指摘します。mojibake_suspected

スクリプトを SQL Server に読み込む

スクリプトはテーブルを作成して行をコピーしてから、キー、インデックス、外部キーを追加します。そのため読み込みが速く、最初のエラーで止まります。

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

外部キーは WITH NOCHECK で追加してからチェックします。存在しない行を参照している行があれば、途中で失敗する代わりに、どの制約かをスクリプトが示し、その制約は未チェックのまま残します。

大きなダンプでは、サーバーと同じマシンで sqlcmd を実行してください。最大 1000 行のバッチごとにコミットするため、トランザクションログは小さいままです。

SQLite を最適な方法でダンプする

コンバーターはダンプの内容を読み取ります。次のオプションを使うと、より多くのデータがダンプに残ります。

  • データベースファイル自体をそのまま変換し、ブラウザでページ単位で読み込みます。変更が -wal ファイルに残らないよう、先に書き込み中のアプリを閉じてください。
  • sqlite3 app.db .dump > app.sql で同じデータベースを SQL として書き出せます。これも .sql または .sql.gz として変換できます。
  • DB Browser for SQLite では File、Export、Database to SQL file の順に選ぶとその SQL を書き出せます。Python の iterdump() も同様です。

変換されないもの

ビューとトリガーは SQLite 独自の言語で書かれています。黙って削除することはなく、レポートに名前で一覧するので、SQL Server 向けに書き直せます。FTS5 や R*Tree などの仮想テーブルも一覧し、そのシャドウテーブルは含めません。

SQLite から SQL Server への変換に関する質問

ここに答えがない場合は、お問い合わせページからご連絡ください。担当者が返信します。 お問い合わせページ

ダンプはアップロードされますか?

いいえ。コンバーターはブラウザ上で動作し、ダンプをディスクから少しずつ読み込むため、ダンプがコンピューターの外に出ることはありません。デスクトップアプリとコマンドラインも、お使いのコンピューター上で変換します。

ダンプはどのくらいの大きさまで扱えますか?

コンバーターはダンプ全体をメモリに保持しません。ファイルを範囲ごとに 2 回読み、読みながらスクリプトを書き出します。数 GB のダンプも、ブラウザ、デスクトップアプリ、コマンドラインで変換できます。

.db ファイル自体を変換できますか?

はい。.db、.sqlite、.sqlite3 ファイルをドロップしてください。ブラウザで読み込まれ、アップロードされることはありません。NUL 文字を含むテキストや double のすべての桁も保存されたとおりに届きます。.dump ではこれらが欠けることがあります。

どの SQLite バージョンのダンプに対応していますか?

SQLite 3.0 以降の UTF-8 または UTF-16 のデータベースファイルと、sqlite3 シェルの .dump または Python の iterdump() で作成したダンプです。すべてのテスト用ファイルとダンプは sqlite3 3.31 から 3.54 で作成し、STRICT と WITHOUT ROWID のテーブルも含め、ソースとセル単位で比較しています。

SQLite が型を強制しない場合、列の型はどう決まりますか?

宣言された型は目安で、値によって決まります。すべての値が収まれば、列は bigint、decimal、float、date、datetime2、bit、varbinary、nvarchar のいずれかになります。テキストは SQLite と同じく厳密に比較し、COLLATE NOCASE の列は大文字と小文字を区別せずに比較します。

INTEGER PRIMARY KEY と AUTOINCREMENT は保持されますか?

はい。INTEGER PRIMARY KEY は IDENTITY 列になり、各行は ID を保ちます。次の ID は最大の ID の後から、AUTOINCREMENT がある場合は sqlite_sequence の値の後から続きます。

ビューとトリガーはどうなりますか?

データベースごとに独自の言語で書かれるため、変換はせず、レポートに名前で一覧します。

スクリプトはどの SQL Server バージョンで読み込めますか?

SQL Server 2017 から 2025 です。同じスクリプトをそれぞれで読み込み、問題があれば最初のエラーで止まります。