Chuyển đến nội dung
Trang chủ IntoSQL

Chuyển tập lệnh SQL Server sang SQL Server cũ hơn hoặc mới hơn

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.

Tệp của bạn
sqlshop_2024_sqlserver.sqlTệp mẫu, 11 kB
Cơ sở dữ liệu của bạn

Đã chuyển đổi 18 hàng, 1 bản sửa, không hàng nào bị từ chối

Hiển thị

Các bảng trong shop_2024_sqlserver.sqlBản dump SQL Server · do SQL Server Management Objects ghi · utf-8

  • orders10 hàng
    11 cột
    idint not null
    customer_idint not null
    statusnvarchar(10) not null
    totaldecimal(19,4) not null
    itemstinyint not null
    ordered_atdatetime2(0) not null
    shipped_atdatetime2(7)
    notenvarchar(max)
    detailsnvarchar(max)
    order_refuniqueidentifier not null
    total_with_taxdecimal(12,2)
  • customers8 hàng1
    8 cột
    idint not null
    namenvarchar(100) not null
    emailnvarchar(200) not null
    countrynchar(2) not null
    is_activebit not null
    signed_update
    created_atdatetimeoffset(0) not null
    row_versionbinary(8)

Không được chuyển đổi

  • Khung nhìn paid_orders
  • Trình kích hoạt orders_no_negative

Mỗi cơ sở dữ liệu viết các đối tượng này bằng ngôn ngữ riêng. Hãy viết lại chúng cho SQL Server.

-- Written by IntoSQL from a SQL Server 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].[orders] (
    [id] int IDENTITY(1, 1) NOT NULL,
    [customer_id] int NOT NULL,
    [status] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT N'pending' NOT NULL,
    [total] decimal(19,4) NOT NULL,
    [items] tinyint DEFAULT 1 NOT NULL,
    [ordered_at] datetime2(0) NOT NULL,
    [shipped_at] datetime2(7) NULL,
    [note] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [details] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [order_ref] uniqueidentifier DEFAULT (NEWID()) NOT NULL,
    [total_with_tax] AS CAST((CAST([total] * (1.16) AS decimal(12,2))) AS decimal(12,2)) PERSISTED,
    CONSTRAINT [check2] CHECK ([status] = N'cancelled' OR [status] = N'shipped' OR [status] = N'paid' OR [status] = N'pending'),
    CONSTRAINT [check3] CHECK ([total] >= (0)),
    CONSTRAINT [PK_orders] PRIMARY KEY ([id])
);
GO

CREATE TABLE [dbo].[customers] (
    [id] int IDENTITY(1, 1) NOT NULL,
    [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [email] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [country] nchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT N'US' NOT NULL,
    [is_active] bit DEFAULT 1 NOT NULL,
    [signed_up] date NULL,
    [created_at] datetimeoffset(0) DEFAULT SYSDATETIMEOFFSET() NOT NULL,
    [row_version] binary(8) NULL,
    CONSTRAINT [PK_customers] 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-15T04:24:00.0000000-06: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-03T09:11:42.0000000+01: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
(3,N'José Peña',N'jose@example.es',N'ES',0,'2023-03-21','2023-03-21T20:05:17.0000000+01: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
(4,N'李雷',N'lilei@example.cn',N'CN',1,'2023-05-09','2023-05-09T10:40:00.0000000+08: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-30T15:00:00.0000000+01: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-02T10:30:00.0000000+01: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-03-01T05:29:59.0000000+05:30');
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-12T14:12:12.0000000+02:00');
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], [details], [order_ref]) VALUES
(1,1,N'shipped',129.9000,3,'2024-03-01T10:00:00.0000000','2024-03-02T16:30:00.1234567',NULL,N'{"gift": false}',N'0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f');
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], [details], [order_ref]) VALUES
(2,2,N'paid',54.0000,1,'2024-03-02T11:15:00.0000000',NULL,N'Gift wrap 🎁',N'{"gift": true, "wrap": "red"}',N'1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70');
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], [details], [order_ref]) VALUES
(3,1,N'cancelled',12.5000,1,'2024-03-03T09:45:00.0000000',NULL,N'Customer changed their mind',NULL,N'2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081');
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], [details], [order_ref]) VALUES
(4,4,N'shipped',980.0000,12,'2024-03-05T02:10:00.0000000','2024-03-07T08:00:00.0000000',N'请小心轻放',N'{"fragile": true}',N'3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192');
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], [details], [order_ref]) VALUES
(5,5,N'pending',45.7500,2,'2024-03-08T17:20:00.0000000',NULL,N'Leave at the door; ring twice',NULL,N'4f1e806c-7d5b-4c2e-9a99-5e6f708192a3');
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], [details], [order_ref]) VALUES
(6,6,N'shipped',310.4000,5,'2024-03-10T13:00:00.0000000','2024-03-11T09:00:00.0000000',N'Fragile: "glass"',N'{"fragile": true}',N'50f2917d-8e6c-4d3f-8baa-6f708192a3b4');
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], [details], [order_ref]) VALUES
(7,8,N'paid',76.2000,2,'2024-03-11T18:45:00.0000000',NULL,NULL,NULL,N'6103a28e-9f7d-4e40-9cbb-708192a3b4c5');
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], [details], [order_ref]) VALUES
(8,2,N'shipped',19.9900,1,'2024-03-12T08:00:00.0000000','9999-12-31T23:59:59.9999999',N'Shipped date set to the maximum by an old import',NULL,N'7214b39f-a08e-4f51-8dcc-8192a3b4c5d6');
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], [details], [order_ref]) VALUES
(9,3,N'shipped',64.0000,2,'2024-03-14T15:30:00.0000000','2024-03-15T10:00:00.0000000',N'Two parcels',N'{"parcels": [1, 2]}',N'8325c4a0-b19f-4062-9edd-92a3b4c5d6e7');
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], [details], [order_ref]) VALUES
(10,7,N'paid',1499.0000,1,'2024-03-15T21:05:00.0000000',NULL,N'C:\Users\ravi\invoice.pdf',NULL,N'9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO

-- Indexes, foreign keys, counters and triggers, after the rows.
CREATE INDEX [idx_orders_customer] ON [dbo].[orders] ([customer_id]);
CREATE INDEX [idx_orders_status_date] ON [dbo].[orders] ([status], [ordered_at]);
CREATE UNIQUE INDEX [email] ON [dbo].[customers] ([email]);
ALTER TABLE [dbo].[orders] WITH NOCHECK ADD CONSTRAINT [FK_orders] FOREIGN KEY ([customer_id]) REFERENCES [dbo].[customers] ([id]);
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].[orders]); IF @next IS NOT NULL BEGIN IF @next < 0 SET @next = 0; DBCC CHECKIDENT (N'[dbo].[orders]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[customers]); IF @next IS NOT NULL BEGIN IF @next < 0 SET @next = 0; DBCC CHECKIDENT (N'[dbo].[customers]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'People who bought at least once', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'customers';
GO

Bản sửa

  1. "row_version" của customers là phiên bản hàng do SQL Server tự đặt; bản dump không có giá trị cho nó, nên nó là binary(8) và để trống.

Cần xem lại

  • 2 khung nhìn, trình kích hoạt, thủ tục hoặc sự kiện không được chuyển đổi; báo cáo liệt kê từng mục. Hãy tạo lại chúng thủ công trong SQL Server.
  • Ràng buộc kiểm tra check1 trên orders không viết được cho SQL Server (function isjson), nên không được tạo. Hãy viết ràng buộc kiểm tra thủ công nếu nó quan trọng.
  • Chỉ mục idx_orders_pending trên orders dùng một biểu thức không viết được cho SQL Server (an index on an expression), nên không được tạo. Hãy tạo chỉ mục thủ công nếu truy vấn cần nó.

Tệp được chuyển đổi ngay trên máy tính này và không bao giờ được tải lên.

Mẫu khác:

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.

  • bit

    bit

    Cùng một kiểu.

  • 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

    nvarchar chứa mọi ký tự, bất kể code page của cột varchar trước đó. Collation UTF-8, thứ SQL Server 2017 không có, thành bản Unicode tương ứng.

  • column collations

    cùng collation trên từng cột

    Các cột so sánh và sắp xếp như trước, và khóa duy nhất phân biệt đúng các hàng như cũ.

  • decimal(p,s), money, smallmoney

    decimal(p,s); money thành decimal(19,4)

    Mọi chữ số được giữ, money với bốn chữ số thập phân.

  • datetime, datetime2, smalldatetime

    datetime2(p)

    datetime2 chứa mọi giá trị datetime và smalldatetime, từ năm 1, với cùng độ chính xác.

  • datetimeoffset

    datetimeoffset, với độ lệch của từng giá trị

    Cùng kiểu và giá trị.

  • time

    time(p)

    Cùng một kiểu.

  • dates that aren't valid

    NULL

    Giá trị không phải ngày sẽ thành NULL và báo cáo đếm nó.

    Dòng báo cáo: date_out_of_range

  • json (SQL Server 2025)

    nvarchar(max)

    Cùng các giá trị JSON, mà hàm JSON của SQL Server đọc được.

  • uniqueidentifier

    uniqueidentifier

    Cùng một kiểu.

  • binary, varbinary, image

    binary(n), varbinary(n) và varbinary(max)

    Byte vẫn là byte.

  • xml, sql_variant, hierarchyid, geometry, geography

    cùng các kiểu

    Các kiểu riêng của SQL Server được giữ; giá trị sql_variant giữ văn bản của nó, nên kiểu cơ sở thành nvarchar.

  • rowversion, timestamp

    binary(8), để trống

    Cột rowversion không nhận được các hàng đã sao chép, và SSMS không ghi giá trị cho nó; hãy thêm lại sau khi nạp nếu bạn cần.

    Dòng báo cáo: rowversion_empty

  • IDENTITY

    IDENTITY, tiếp tục sau id lớn nhất

    Các id đã sao chép được nạp với IDENTITY_INSERT, và bộ đếm tiếp tục sau id lớn nhất.

  • CREATE SEQUENCE

    CREATE SEQUENCE với cùng các tùy chọn

    Sequence của SQL Server hoạt động giống vậy. SSMS không ghi sequence đã chạy đến đâu, nên nó bắt đầu từ điểm lúc được tạo.

  • computed columns

    cùng các cột tính toán, PERSISTED như trong nguồn

    Cùng các công thức, do cơ sở dữ liệu đích tính.

  • computed columns with functions IntoSQL doesn't write

    một cột thường

    Công thức không viết được để lại một cột thường và một dòng trong báo cáo; SSMS không ghi giá trị cho cột tính toán.

    Dòng báo cáo: generated_not_translated

  • defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR

    không có giá trị mặc định

    Giá trị mặc định không viết được sẽ bị bỏ và được báo cáo.

    Dòng báo cáo: default_not_translated

  • CHECK constraints

    được chuyển đổi

    Cùng các ràng buộc kiểm tra, được kiểm tra khi từng hàng được nạp.

  • CHECK constraints with functions IntoSQL doesn't write

    không được tạo

    Ràng buộc kiểm tra không viết được sẽ bị bỏ và được báo cáo.

    Dòng báo cáo: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    không được tạo

    SQL Server không áp dụng các ràng buộc kiểm tra này, nên các hàng có thể vi phạm chúng.

    Dòng báo cáo: check_not_enforced

  • filtered and columnstore indexes

    không được tạo

    IntoSQL ghi chỉ mục b-tree trên toàn bộ cột; hãy tạo lại các chỉ mục khác sau khi nạp.

    Dòng báo cá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

    Khóa được tạo sau các hàng và kiểm tra sau cùng; hàng không có hàng cha khiến khóa ở trạng thái chưa kiểm tra kèm cảnh báo thay vì dừng quá trình nạp.

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

    NO ACTION

    SQL Server từ chối các thao tác lan truyền đó, nên bản dump không bao giờ chứa chúng; dòng này dành cho tập lệnh được sửa bằng tay.

    Dòng báo cáo: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    không được tạo

    Khóa không thể tham chiếu tới bảng không tồn tại.

    Dòng báo cá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

    Các hàng giữ nguyên; hãy phân vùng lại bảng trong SQL Server nếu cần.

    Dòng báo cáo: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    hai bảng: các hàng hiện tại và lịch sử

    Bảng và bảng lịch sử của nó được sao chép thành bảng thường; hãy bật lại SYSTEM_VERSIONING để liên kết chúng.

    Dòng báo cáo: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    bỏ NOT NULL

    Cột có giá trị phải chuyển thành NULL không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng.

    Dòng báo cáo: not_null_relaxed

  • views, functions, procedures, triggers, synonyms, types and partition functions

    được liệt kê trong báo cáo

    IntoSQL chuyển đổi các bảng và hàng của chúng; phần còn lại được liệt kê để bạn tạo lại từ tập lệnh gốc.

    Dòng báo cáo: not_converted_objects

  • scripts without CREATE TABLE (data only)

    kiểu suy ra từ giá trị

    Tập lệnh chỉ có dữ liệu thì chỉ có các hàng, nên kiểu được suy ra từ giá trị.

    Dòng báo cáo: no_schema

  • expressions in INSERT values

    NULL

    Trình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng.

    Dòng báo cáo: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    Văn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp.

    Dòng báo cáo: unknown_type

  • NUL characters in text

    được giữ

    nvarchar chứa được ký tự NUL, nên giá trị được sao chép nguyên trạng.

  • text that isn't valid in its encoding

    byte lỗi thành ký tự thay thế

    Tập lệnh là UTF-8 và mọi giá trị phải là văn bản hợp lệ.

    Dòng báo cáo: invalid_utf8_replaced

  • text decoded twice (ñ)

    sao chép nguyên trạng

    Tập lệnh chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng.

    Dòng báo cáo: mojibake_suspected

Trong tệpTrong tập lệnhDòng báo cáo
bitbitCùng một kiểu.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(n), nvarchar(n) và nvarchar(max), với collation của từng cộtnvarchar chứa mọi ký tự, bất kể code page của cột varchar trước đó. Collation UTF-8, thứ SQL Server 2017 không có, thành bản Unicode tương ứng.
column collationscùng collation trên từng cộtCác cột so sánh và sắp xếp như trước, và khóa duy nhất phân biệt đúng các hàng như cũ.
decimal(p,s), money, smallmoneydecimal(p,s); money thành decimal(19,4)Mọi chữ số được giữ, money với bốn chữ số thập phân.
datetime, datetime2, smalldatetimedatetime2(p)datetime2 chứa mọi giá trị datetime và smalldatetime, từ năm 1, với cùng độ chính xác.
datetimeoffsetdatetimeoffset, với độ lệch của từng giá trịCùng kiểu và giá trị.
timetime(p)Cùng một kiểu.
dates that aren't validNULLGiá trị không phải ngày sẽ thành NULL và báo cáo đếm nó.date_out_of_range
json (SQL Server 2025)nvarchar(max)Cùng các giá trị JSON, mà hàm JSON của SQL Server đọc được.
uniqueidentifieruniqueidentifierCùng một kiểu.
binary, varbinary, imagebinary(n), varbinary(n) và varbinary(max)Byte vẫn là byte.
xml, sql_variant, hierarchyid, geometry, geographycùng các kiểuCác kiểu riêng của SQL Server được giữ; giá trị sql_variant giữ văn bản của nó, nên kiểu cơ sở thành nvarchar.
rowversion, timestampbinary(8), để trốngCột rowversion không nhận được các hàng đã sao chép, và SSMS không ghi giá trị cho nó; hãy thêm lại sau khi nạp nếu bạn cần.rowversion_empty
IDENTITYIDENTITY, tiếp tục sau id lớn nhấtCác id đã sao chép được nạp với IDENTITY_INSERT, và bộ đếm tiếp tục sau id lớn nhất.
CREATE SEQUENCECREATE SEQUENCE với cùng các tùy chọnSequence của SQL Server hoạt động giống vậy. SSMS không ghi sequence đã chạy đến đâu, nên nó bắt đầu từ điểm lúc được tạo.
computed columnscùng các cột tính toán, PERSISTED như trong nguồnCùng các công thức, do cơ sở dữ liệu đích tính.
computed columns with functions IntoSQL doesn't writemột cột thườngCông thức không viết được để lại một cột thường và một dòng trong báo cáo; SSMS không ghi giá trị cho cột tính toán.generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FORkhông có giá trị mặc địnhGiá trị mặc định không viết được sẽ bị bỏ và được báo cáo.default_not_translated
CHECK constraintsđược chuyển đổiCùng các ràng buộc kiểm tra, được kiểm tra khi từng hàng được nạp.
CHECK constraints with functions IntoSQL doesn't writekhông được tạoRàng buộc kiểm tra không viết được sẽ bị bỏ và được báo cáo.check_skipped
CHECK constraints added WITH NOCHECK or disabledkhông được tạoSQL Server không áp dụng các ràng buộc kiểm tra này, nên các hàng có thể vi phạm chúng.check_not_enforced
filtered and columnstore indexeskhông được tạoIntoSQL ghi chỉ mục b-tree trên toàn bộ cột; hãy tạo lại các chỉ mục khác sau khi nạp.index_skipped
foreign keyssau dữ liệu với WITH NOCHECK, rồi kiểm tra kèm cảnh báo về hàng mồ côiKhóa được tạo sau các hàng và kiểm tra sau cùng; hàng không có hàng cha khiến khóa ở trạng thái chưa kiểm tra kèm cảnh báo thay vì dừng quá trình nạp.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server từ chối các thao tác lan truyền đó, nên bản dump không bao giờ chứa chúng; dòng này dành cho tập lệnh được sửa bằng tay.foreign_key_action_dropped
foreign keys to tables the dump doesn't createkhông được tạoKhóa không thể tham chiếu tới bảng không tồn tại.foreign_key_skipped
tables on a partition schememột bảng chứa các hàng của mọi phân vùngCác hàng giữ nguyên; hãy phân vùng lại bảng trong SQL Server nếu cần.partitions_dropped
temporal tables (SYSTEM_VERSIONING)hai bảng: các hàng hiện tại và lịch sửBảng và bảng lịch sử của nó được sao chép thành bảng thường; hãy bật lại SYSTEM_VERSIONING để liên kết chúng.system_versioning_dropped
NOT NULL columns with values that become NULLbỏ NOT NULLCột có giá trị phải chuyển thành NULL không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsđược liệt kê trong báo cáoIntoSQL chuyển đổi các bảng và hàng của chúng; phần còn lại được liệt kê để bạn tạo lại từ tập lệnh gốc.not_converted_objects
scripts without CREATE TABLE (data only)kiểu suy ra từ giá trịTập lệnh chỉ có dữ liệu thì chỉ có các hàng, nên kiểu được suy ra từ giá trị.no_schema
expressions in INSERT valuesNULLTrình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng.expression_value
types IntoSQL doesn't knownvarchar(max)Văn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp.unknown_type
NUL characters in textđược giữnvarchar chứa được ký tự NUL, nên giá trị được sao chép nguyên trạng.
text that isn't valid in its encodingbyte lỗi thành ký tự thay thếTập lệnh là UTF-8 và mọi giá trị phải là văn bản hợp lệ.invalid_utf8_replaced
text decoded twice (ñ)sao chép nguyên trạngTập lệnh chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chú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.

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

Chưa có câu trả lời ở đây? Hãy viết cho chúng tôi từ trang liên hệ, sẽ có người trả lời. Trang liên hệ

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