---
title: "Chuyển SQL Server sang SQLite trên trình duyệt"
description: "Di chuyển cơ sở dữ liệu SQL Server sang SQLite: chuyển tập lệnh SSMS tạo ra thành tập lệnh cùng bảng, khóa và dữ liệu, kèm báo cáo mọi thay đổi."
canonical: https://intosql.com/vi/sql-server-sang-sqlite
last_updated: 2026-10-15
---

# Chuyển SQL Server sang SQLite trên trình duyệt

Thả tập lệnh mà Generate Scripts của SSMS ghi với schema và dữ liệu, dạng .sql hoặc .sql.gz, UTF-16 hoặc UTF-8, và tải xuống tập lệnh SQLite với cùng bảng, khóa, chỉ mục và dữ liệu. Mọi giá trị SQLite không chứa được nguyên trạng, và mọi đối tượng nó không hỗ trợ, đều được liệt kê trong báo cáo.

[Hướng dẫn di chuyển SQL Server sang SQLite](https://intosql.com/docs/migrations/sql-server-to-sqlite)

[Kiểu dữ liệu từ SQL Server sang SQLite](https://intosql.com/docs/types/sql-server-to-sqlite)

## Những gì thay đổi từ SQL Server sang SQLite

Mỗi hàng là một quy tắc trình chuyển đổi áp dụng, kèm dòng báo cáo được ghi khi quy tắc thay đổi dữ liệu của bạn.

| Trong SQL Server | Trong SQLite | Dòng báo cáo |
| --- | --- | --- |
| bit | INTEGER 0 hoặc 1 kèm CHECK |  |
| tinyint | INTEGER kèm CHECK không âm | `unsigned_widened` |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text | VARCHAR(n) và TEXT, không áp dụng độ dài |  |
| decimal(p,s) past 15 digits, money | TEXT | `decimal_as_text` |
| date, datetime, datetime2, smalldatetime | DATETIME dạng văn bản ISO 8601, giữ mọi chữ số |  |
| datetimeoffset | TIMESTAMP dạng văn bản ISO 8601 theo UTC | `moments_as_utc` |
| time | TIME dạng văn bản |  |
| dates that aren't valid | NULL | `date_out_of_range` |
| json (SQL Server 2025) | TEXT |  |
| uniqueidentifier | TEXT |  |
| binary, varbinary, image | BLOB |  |
| geometry, geography | BLOB với byte riêng của SQL Server | `spatial_as_native` |
| rowversion, timestamp | BLOB, để trống | `rowversion_empty` |
| xml, sql_variant, hierarchyid, vector | TEXT | `type_replaced` |
| collations that ignore case (_CI_) | so sánh chính xác | `case_insensitive_collation` |
| IDENTITY | INTEGER PRIMARY KEY AUTOINCREMENT, tiếp tục sau id lớn nhất |  |
| IDENTITY columns that aren't the whole primary key | INTEGER không có bộ đếm | `counter_dropped` |
| CREATE SEQUENCE | không được tạo | `sequence_not_converted` |
| computed columns | GENERATED ALWAYS AS, STORED khi PERSISTED, nếu không thì VIRTUAL |  |
| computed columns with functions SQLite lacks | một cột thường | `generated_not_translated` |
| defaults with functions SQLite lacks, and NEXT VALUE FOR | không có giá trị mặc định | `default_not_translated` |
| CHECK constraints | được chuyển đổi |  |
| CHECK constraints with functions SQLite lacks | không được tạo | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | không được tạo | `check_not_enforced` |
| filtered and columnstore indexes | không được tạo | `index_skipped` |
| foreign keys | trong CREATE TABLE, nạp không kiểm tra, rồi liệt kê bằng PRAGMA foreign_key_check |  |
| foreign keys to tables the dump doesn't create | không được tạo | `foreign_key_skipped` |
| tables on a partition scheme | một bảng chứa các hàng của mọi phân vùng | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | hai bảng: các hàng hiện tại và lịch sử | `system_versioning_dropped` |
| schemas | một tệp, mỗi bảng có tên schema ở đầu | `schemas_merged` |
| NOT NULL columns with values that become NULL | bỏ NOT NULL | `not_null_relaxed` |
| views, functions, procedures, triggers, synonyms, types and partition functions | được liệt kê trong báo cáo | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | kiểu suy ra từ giá trị | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | TEXT | `unknown_type` |
| NUL characters in text | được giữ |  |
| text that isn't valid in its encoding | byte lỗi thành ký tự thay thế | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | sao chép nguyên trạng | `mojibake_suspected` |

## Nạp tập lệnh vào SQLite

Tập lệnh tạo bảng, sao chép các hàng, rồi thêm khóa, chỉ mục và khóa ngoại, nên nạp nhanh và dừng ở lỗi đầu tiên.

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

Khóa ngoại được khai báo trong từng bảng và các hàng được nạp khi tắt kiểm tra khóa ngoại. Sau đó tập lệnh liệt kê mọi hàng trỏ tới hàng không tồn tại, thay vì thất bại giữa chừng.

Với bản dump lớn, hãy nạp vào một tệp mới trên ổ đĩa cục bộ. Tập lệnh nạp mọi thứ trong một giao dịch với đồng bộ đĩa tắt, nên chạy ở tốc độ của ổ đĩa, và lần nạp dừng giữa chừng không để lại bảng dở dang.

Dòng lệnh nạp tệp thẳng vào cơ sở dữ liệu SQLite, không cần tạo tập lệnh. Hoàn toàn miễn phí.

## Tạo bản dump SQL Server để có kết quả tốt nhất

Trình chuyển đổi đọc những gì bản dump chứa. Các tùy chọn sau giữ lại nhiều dữ liệu hơn trong đó:

- Trong SSMS, nhấp chuột phải vào cơ sở dữ liệu, Tasks, Generate Scripts, rồi chọn các bảng. dbatools, mssql-scripter và các công cụ khác dựng trên cùng thư viện ghi ra cùng một tập lệnh.
- Trong Advanced, đặt Types of data to script thành Schema and data. Tập lệnh chỉ có schema sẽ có bảng mà không có hàng.
- Lưu dưới dạng Unicode, mặc định của SSMS, hoặc UTF-8: cả hai đều được đọc như nhau, và gzip cũng được.

## Những gì không được chuyển đổi

Khung nhìn, hàm, thủ tục, trình kích hoạt, từ đồng nghĩa, quy tắc và chính sách bảo mật được viết bằng T-SQL. Chúng được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn viết lại cho SQLite.

## Câu hỏi về SQL Server sang SQLite

### Bản dump của tôi có bị tải lên không?

Không. Trình chuyển đổi chạy trong trình duyệt và đọc bản dump từ ổ đĩa theo từng phần, nên nó không bao giờ rời khỏi máy tính của bạn. Ứng dụng máy tính và dòng lệnh cũng chuyển đổi ngay trên máy tính của bạn.

### Bản dump có thể lớn đến đâu?

Trình chuyển đổi không bao giờ giữ toàn bộ bản dump trong bộ nhớ: nó đọc tệp hai lần, theo từng đoạn, và ghi tập lệnh trong lúc đọc. Bản dump nhiều gigabyte vẫn chuyển đổi được trong trình duyệt, trong ứng dụng máy tính và bằng dòng lệnh.

### Nó có đọc được tệp UTF-16 mà SSMS lưu không?

Có. SSMS lưu tập lệnh dạng UTF-16 theo mặc định, và trình chuyển đổi đọc UTF-16 và UTF-8 như nhau, có nén gzip hay không, với GO giữa các lô.

### Tập lệnh có thể đến từ những phiên bản SQL Server nào?

Tập lệnh do SSMS, dbatools hoặc mssql-scripter ghi từ SQL Server 2017 trở lên. Mọi tập lệnh thử nghiệm đến từ SQL Server 2017, 2022 và 2025 và được so với nguồn từng ô một.

### Giá trị IDENTITY có được giữ không?

Cột IDENTITY là toàn bộ khóa chính của bảng trở thành INTEGER PRIMARY KEY AUTOINCREMENT, mọi hàng giữ id của nó, và id tiếp theo tiếp tục sau id lớn nhất. Cột khác giữ giá trị mà không có bộ đếm.

### money, datetimeoffset và các kiểu SQL Server khác sẽ ra sao?

bit thành 0 và 1, datetime2 thành văn bản ISO 8601 với mọi chữ số, datetimeoffset thành văn bản UTC, còn số thập phân rộng và money thành văn bản chính xác. Cột tính toán vẫn là cột tính toán. Schema thành tiền tố tên bảng.

### Còn thủ tục, trình kích hoạt và khung nhìn thì sao?

Chúng được liệt kê theo tên trong báo cáo và không được chuyển đổi, vì mỗi cơ sở dữ liệu viết chúng bằng ngôn ngữ riêng.

### Tập lệnh nạp được trên những phiên bản SQLite nào?

SQLite 3.31 trở lên. Mọi tập lệnh thử nghiệm đều nạp được trên 3.31 và 3.54, và dừng ở lỗi đầu tiên nếu có sự cố.

## Từ SQL Server

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

## Sang SQLite

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

## Hướng dẫn và mọi cặp

- [SQLite sang SQL Server](https://intosql.com/vi/sqlite-sang-sql-server)
- [Hướng dẫn di chuyển SQL Server sang SQLite](https://intosql.com/docs/migrations/sql-server-to-sqlite)
- [Kiểu dữ liệu từ SQL Server sang SQLite](https://intosql.com/docs/types/sql-server-to-sqlite)
- [Mọi cặp cơ sở dữ liệu](https://intosql.com/vi/chuyen-co-so-du-lieu)
