---
title: "Chuyển tập lệnh SQL Server sang phiên bản khác"
description: "Chuyển tập lệnh SSMS từ SQL Server 2017 trở lên thành tập lệnh nạp được trên SQL Server 2017 đến 2025, 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-sql-server
last_updated: 2026-10-15
---

# Chuyển tập lệnh SQL Server sang phiên bản khác

Thả tập lệnh mà Generate Scripts của SSMS viết 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 nạp được trên SQL Server 2017 đến 2025, dù phiên bản nào viết nó. Identity, collation và các kiểu như xml và hierarchyid giữ nguyên, và mọi thay đổi được liệt kê trong báo cáo.

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

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

## Những gì thay đổi giữa tệp và tập lệnh

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 tệp | Trong tập lệnh | Dòng báo cáo |
| --- | --- | --- |
| bit | bit |  |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext | nchar(n), nvarchar(n) và nvarchar(max), với collation của từng cột |  |
| column collations | cùng collation trên từng cột |  |
| decimal(p,s), money, smallmoney | decimal(p,s); money thành decimal(19,4) |  |
| datetime, datetime2, smalldatetime | datetime2(p) |  |
| datetimeoffset | datetimeoffset, với độ lệch của từng giá trị |  |
| time | time(p) |  |
| dates that aren't valid | NULL | `date_out_of_range` |
| json (SQL Server 2025) | nvarchar(max) |  |
| uniqueidentifier | uniqueidentifier |  |
| binary, varbinary, image | binary(n), varbinary(n) và varbinary(max) |  |
| xml, sql_variant, hierarchyid, geometry, geography | cùng các kiểu |  |
| rowversion, timestamp | binary(8), để trống | `rowversion_empty` |
| IDENTITY | IDENTITY, tiếp tục sau id lớn nhất |  |
| CREATE SEQUENCE | CREATE SEQUENCE với cùng các tùy chọn |  |
| computed columns | cùng các cột tính toán, PERSISTED như trong nguồn |  |
| computed columns with functions IntoSQL doesn't write | một cột thường | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write, 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 IntoSQL doesn't write | 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 | sau dữ liệu với WITH NOCHECK, rồi kiểm tra kèm cảnh báo về hàng mồ côi |  |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTION | `foreign_key_action_dropped` |
| 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` |
| 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 | nvarchar(max) | `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 SQL Server

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
sqlcmd -b -f 65001 -S localhost -d mydb -i sql_server.sql_server.sql
```

Khóa ngoại được thêm với WITH NOCHECK rồi được kiểm tra. Nếu một hàng trỏ tới hàng không tồn tại, tập lệnh cho biết ràng buộc nào và để nó ở trạng thái chưa kiểm tra, thay vì thất bại giữa chừng.

Với bản dump lớn, hãy chạy sqlcmd trên cùng máy với máy chủ. Mỗi lô tối đa 1000 hàng được commit riêng, nên nhật ký giao dịch luôn nhỏ.

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

View, trigger, thủ tục, hàm và các đối tượng khác viết bằng ngôn ngữ riêng của SQL Server được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn kiểm tra từng cái với phiên bản SQL Server bạn nạp vào trước khi tạo lại.

## Câu hỏi về chuyển SQL Server giữa các phiên bản

### 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ó. Cột IDENTITY được nạp với IDENTITY_INSERT, mọi hàng giữ id của nó, và bộ đếm tiếp tục sau id lớn nhất. Sequence được tạo với cùng các tùy chọn.

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

Chúng giữ nguyên: kể cả xml, sql_variant, hierarchyid, geometry và geography, và mọi cột văn bản giữ collation của nó. Giá trị datetimeoffset giữ độ lệch. Cột rowversion là binary(8), vì tập lệnh không có giá trị cho chú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, để bạn chạy phần của chúng trong tập lệnh gốc sau khi có các bảng.

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

SQL Server 2017 đến 2025, bất kể phiên bản nào đã ghi tập lệnh. Cùng một tập lệnh nạp được trên từng phiên bản, 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 SQLite](https://intosql.com/vi/sql-server-sang-sqlite)
- [SQL Server sang Oracle](https://intosql.com/vi/sql-server-sang-oracle)

## Sang SQL Server

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

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

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