---
title: "Migracja SQLite do SQL Server w przeglądarce"
description: "Migruj bazę SQLite do SQL Server: zamień plik .db lub jego zrzut w skrypt z tymi samymi tabelami, kluczami i danymi oraz raportem każdej zmiany."
canonical: https://intosql.com/pl/sqlite-do-sql-server
last_updated: 2026-10-15
---

# Migracja SQLite do SQL Server w przeglądarce

Upuść plik bazy danych SQLite (.db, .sqlite, .sqlite3) albo SQL zapisany przez .dump z sqlite3 i pobierz skrypt SQL Server z tymi samymi tabelami, kluczami, indeksami i danymi. Każda kolumna dostaje typ, w którym mieszczą się jej wartości, a każda wartość, której SQL Server nie może przechować bez zmian, jest wymieniona w raporcie.

[Przewodnik migracji SQLite do SQL Server](https://intosql.com/docs/migrations/sqlite-to-sql-server)

[Typy danych z SQLite do SQL Server](https://intosql.com/docs/types/sqlite-to-sql-server)

## Co zmienia się między SQLite a SQL Server

Każdy wiersz to reguła stosowana przez konwerter, z wpisem, który dodaje do raportu, gdy reguła coś zmienia w twoich danych.

| W SQLite | W SQL Server | Wpis w raporcie |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | typ, w którym mieści się każda wartość kolumny |  |
| BOOLEAN, BOOL | bit |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | nvarchar(n) lub nvarchar(max) |  |
| DECIMAL(p,s), NUMERIC | dokładny typ, gdy mieści się w nim każda wartość, w przeciwnym razie double |  |
| BLOB, and columns holding bytes | varbinary(max) |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | date, datetime2(p) |  |
| JSON holding JSON text | nvarchar(max) |  |
| Infinity in REAL columns | NULL | `invalid_value_null` |
| INTEGER PRIMARY KEY, AUTOINCREMENT | IDENTITY, kontynuowane po najwyższym id lub wartości z sqlite_sequence |  |
| COLLATE NOCASE | porównywanie bez rozróżniania wielkości liter |  |
| generated columns | kolumny obliczane, PERSISTED przy STORED |  |
| generated columns with functions IntoSQL doesn't write, and the || operator | zwykła kolumna | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | brak wartości domyślnej | `default_not_translated` |
| CHECK constraints | przetłumaczone |  |
| CHECK constraints with functions IntoSQL doesn't write | nie jest tworzone | `check_skipped` |
| partial and expression indexes | nie jest tworzone | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | po danych z WITH NOCHECK, potem sprawdzany |  |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTION | `foreign_key_action_dropped` |
| VARCHAR(n) holding characters past U+FFFF (emoji) | nvarchar(2n) lub nvarchar(max) powyżej 4000 | `text_length_widened` |
| foreign keys to tables the dump doesn't create | nie jest tworzone | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL usunięte | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | wymienione w raporcie | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | typy odczytane z wartości | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | zachowane |  |
| text that isn't valid UTF-8 | błędne bajty jako znak zastępczy | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | skopiowane bez zmian | `mojibake_suspected` |

## Załaduj skrypt do SQL Server

Skrypt tworzy tabele, kopiuje wiersze, a potem dodaje klucze, indeksy i klucze obce, więc ładuje się szybko i zatrzymuje przy pierwszym błędzie.

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

Klucze obce są dodawane z WITH NOCHECK, a potem sprawdzane. Jeśli wiersz wskazuje na nieistniejący wiersz, skrypt podaje, którego ograniczenia to dotyczy, i zostawia je niesprawdzone, zamiast przerwać w połowie.

Przy dużym zrzucie uruchom sqlcmd na tej samej maszynie co serwer. Każda partia do 1000 wierszy jest zatwierdzana osobno, więc dziennik transakcji pozostaje mały.

## Jak zrobić zrzut SQLite dla najlepszego wyniku

Konwerter odczytuje to, co zawiera zrzut. Te opcje zachowują w nim więcej twoich danych:

- Sam plik bazy danych konwertuje się bez zmian, odczytywany strona po stronie w przeglądarce. Najpierw zamknij aplikację, która do niego zapisuje, żeby żadna zmiana nie została w jego pliku -wal.
- sqlite3 app.db .dump > app.sql zapisuje tę samą bazę danych jako SQL, który też się konwertuje, jako .sql lub .sql.gz.
- DB Browser for SQLite zapisuje ten SQL przez File, Export, Database to SQL file, podobnie jak iterdump() w Pythonie.

## Co nie jest konwertowane

Widoki i wyzwalacze są pisane we własnym języku SQLite. Raport wymienia je z nazwy i nigdy nie pomija ich po cichu, więc możesz je przepisać dla SQL Server. Tabele wirtualne, takie jak FTS5 i R*Tree, też są wymienione, a ich tabele cieni są pomijane.

## Pytania o konwersję SQLite do SQL Server

### Czy mój zrzut jest wysyłany?

Nie. Konwerter działa w przeglądarce i odczytuje zrzut z dysku po kawałku, więc nigdy nie opuszcza on twojego komputera. Aplikacja na komputer i wiersz poleceń też konwertują na twoim komputerze.

### Jak duży może być zrzut?

Konwerter nigdy nie trzyma całego zrzutu w pamięci: czyta plik dwa razy, fragmentami, i zapisuje skrypt na bieżąco. Zrzuty wielogigabajtowe konwertują się w przeglądarce, w aplikacji na komputer i w wierszu poleceń.

### Czy mogę przekonwertować sam plik .db?

Tak. Upuść plik .db, .sqlite lub .sqlite3: jest odczytywany w przeglądarce i nigdy nie jest wysyłany. Tekst ze znakami NUL i każda cyfra wartości double docierają tak, jak zostały zapisane, a .dump może je obciąć.

### Z jakich wersji SQLite może pochodzić zrzut?

Pliki bazy danych od SQLite 3.0, w UTF-8 lub UTF-16, oraz zrzuty z .dump powłoki sqlite3 lub z iterdump() w Pythonie. Każdy testowy plik i zrzut pochodzi z sqlite3 od 3.31 do 3.54, łącznie z tabelami STRICT i WITHOUT ROWID, i jest porównywany ze źródłem komórka po komórce.

### Jak ustalane są typy kolumn, skoro SQLite ich nie wymusza?

Zadeklarowany typ jest wskazówką, a decydują wartości: kolumna staje się bigint, decimal, float, date, datetime2, bit, varbinary lub nvarchar, gdy mieści się w nim każda wartość. Tekst porównuje się dokładnie, jak w SQLite, a COLLATE NOCASE bez rozróżniania wielkości liter.

### Czy INTEGER PRIMARY KEY i AUTOINCREMENT są zachowywane?

Tak. INTEGER PRIMARY KEY staje się kolumną IDENTITY, każdy wiersz zachowuje swoje id, a kolejne id idzie po najwyższym albo, przy AUTOINCREMENT, po wartości z sqlite_sequence.

### A widoki i wyzwalacze?

Raport wymienia je z nazwy, ale nie są konwertowane, bo każda baza danych zapisuje je we własnym języku.

### Na jakich wersjach SQL Server ładuje się skrypt?

SQL Server od 2017 do 2025. Ten sam skrypt ładuje się na każdej z nich i zatrzymuje przy pierwszym błędzie, jeśli coś pójdzie nie tak.

## Z SQLite

- [SQLite do PostgreSQL](https://intosql.com/pl/sqlite-do-postgresql)
- [SQLite do MySQL](https://intosql.com/pl/sqlite-do-mysql)
- [SQLite do MariaDB](https://intosql.com/pl/sqlite-do-mariadb)
- [SQLite do SQLite](https://intosql.com/pl/sqlite-do-sqlite)
- [SQLite do Oracle](https://intosql.com/pl/sqlite-do-oracle)

## Do SQL Server

- [MySQL do SQL Server](https://intosql.com/pl/mysql-do-sql-server)
- [MariaDB do SQL Server](https://intosql.com/pl/mariadb-do-sql-server)
- [PostgreSQL do SQL Server](https://intosql.com/pl/postgresql-do-sql-server)
- [SQL Server do SQL Server](https://intosql.com/pl/sql-server-do-sql-server)
- [Oracle do SQL Server](https://intosql.com/pl/oracle-do-sql-server)

## Przewodnik i każda para

- [SQL Server do SQLite](https://intosql.com/pl/sql-server-do-sqlite)
- [Przewodnik migracji SQLite do SQL Server](https://intosql.com/docs/migrations/sqlite-to-sql-server)
- [Typy danych z SQLite do SQL Server](https://intosql.com/docs/types/sqlite-to-sql-server)
- [Każda para baz danych](https://intosql.com/pl/migracja-bazy-danych)
