Pindahkan skrip SQL Server ke SQL Server versi lebih lama atau lebih baru
Letakkan skrip yang ditulis Generate Scripts di SSMS dengan schema dan data, sebagai .sql atau .sql.gz, UTF-16 atau UTF-8, lalu unduh skrip yang dimuat di SQL Server 2017 sampai 2025, versi mana pun yang menulisnya. Identity, collation, dan tipe seperti xml dan hierarchyid tetap apa adanya, dan setiap perubahan dicantumkan di laporan.
18 baris dikonversi, 1 perbaikan, tidak ada yang ditolak
Tabel di shop_2024_sqlserver.sqlDump SQL Server · ditulis oleh SQL Server Management Objects · utf-8
orders10 baris
11 kolom id int not null customer_id int not null status nvarchar(10) not null total decimal(19,4) not null items tinyint not null ordered_at datetime2(0) not null shipped_at datetime2(7) note nvarchar(max) details nvarchar(max) order_ref uniqueidentifier not null total_with_tax decimal(12,2) customers8 baris1
8 kolom id int not null name nvarchar(100) not null email nvarchar(200) not null country nchar(2) not null is_active bit not null signed_up date created_at datetimeoffset(0) not null row_version binary(8)
Tidak dikonversi
- View paid_orders
- Trigger orders_no_negative
Setiap database menulis objek ini dalam bahasanya sendiri. Tulis ulang untuk 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
Perbaikan
- "row_version" dari customers adalah versi baris yang diatur SQL Server sendiri; dump tidak berisi nilainya, jadi menjadi binary(8) dan kosong.
Perlu diperiksa
- 2 view, trigger, rutin, atau event tidak dikonversi; laporan mencantumkan masing-masing. Buat ulang secara manual di SQL Server.
- CHECK check1 pada orders tidak bisa ditulis untuk SQL Server (function isjson), jadi tidak dibuat. Tulis CHECK secara manual jika penting.
- Indeks idx_orders_pending pada orders memakai ekspresi yang tidak bisa ditulis untuk SQL Server (an index on an expression), jadi tidak dibuat. Buat indeks secara manual jika kueri memerlukannya.
File Anda dikonversi di komputer ini dan tidak pernah diunggah.
Contoh lain:
Apa yang berubah antara file dan skrip
Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.
bit
bit
Tipe yang sama.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext
nchar(n), nvarchar(n), dan nvarchar(max), dengan collation setiap kolom
nvarchar memuat setiap karakter, apa pun code page kolom varchar sebelumnya. Collation UTF-8, yang tidak ada di SQL Server 2017, menjadi pasangan Unicode-nya.
column collations
collation yang sama di setiap kolom
Kolom dibandingkan dan diurutkan seperti sebelumnya, dan unique key membedakan baris yang sama.
decimal(p,s), money, smallmoney
decimal(p,s); money sebagai decimal(19,4)
Setiap digit dipertahankan, money dengan empat desimalnya.
datetime, datetime2, smalldatetime
datetime2(p)
datetime2 memuat setiap nilai datetime dan smalldatetime, sejak tahun 1, dengan presisi yang sama.
datetimeoffset
datetimeoffset, dengan offset setiap nilai
Tipe dan nilai yang sama.
time
time(p)
Tipe yang sama.
dates that aren't valid
NULL
Nilai yang bukan tanggal menjadi NULL dan laporan menghitungnya.
Baris laporan: date_out_of_range
json (SQL Server 2025)
nvarchar(max)
Nilai JSON yang sama, yang dibaca fungsi JSON di SQL Server.
uniqueidentifier
uniqueidentifier
Tipe yang sama.
binary, varbinary, image
binary(n), varbinary(n), dan varbinary(max)
Byte tetap byte.
xml, sql_variant, hierarchyid, geometry, geography
tipe yang sama
Tipe milik SQL Server dipertahankan; nilai sql_variant mempertahankan teksnya, jadi tipe dasarnya menjadi nvarchar.
rowversion, timestamp
binary(8), kosong
Kolom rowversion tidak bisa menerima baris yang disalin, dan SSMS tidak menulis nilainya; tambahkan lagi setelah pemuatan jika Anda membutuhkannya.
Baris laporan: rowversion_empty
IDENTITY
IDENTITY, berlanjut setelah id tertinggi
Id yang disalin dimuat dengan IDENTITY_INSERT, dan penghitung berlanjut setelah id tertinggi.
CREATE SEQUENCE
CREATE SEQUENCE dengan opsi yang sama
Sequence SQL Server bekerja dengan cara yang sama. SSMS tidak menulis posisi yang sudah dicapai sequence, jadi sequence mulai dari titik saat dibuat.
computed columns
kolom terhitung yang sama, PERSISTED seperti di sumber
Rumus yang sama, dihitung oleh database tujuan.
computed columns with functions IntoSQL doesn't write
kolom biasa
Rumus yang tidak bisa ditulis menyisakan kolom biasa dan satu baris laporan; SSMS tidak menulis nilai untuk kolom terhitung.
Baris laporan: generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR
tanpa default
Default yang tidak bisa ditulis dihilangkan dan dilaporkan.
Baris laporan: default_not_translated
CHECK constraints
diterjemahkan
CHECK yang sama, diuji saat setiap baris dimuat.
CHECK constraints with functions IntoSQL doesn't write
tidak dibuat
CHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.
Baris laporan: check_skipped
CHECK constraints added WITH NOCHECK or disabled
tidak dibuat
SQL Server tidak menerapkan CHECK ini, jadi baris bisa melanggarnya.
Baris laporan: check_not_enforced
filtered and columnstore indexes
tidak dibuat
IntoSQL menulis indeks b-tree pada kolom utuh; buat ulang indeks lainnya setelah pemuatan.
Baris laporan: index_skipped
foreign keys
setelah data WITH NOCHECK, lalu diperiksa dengan peringatan untuk baris yatim
Key dibuat setelah baris dan diperiksa terakhir; baris tanpa induk membuatnya tetap tidak diperiksa dengan peringatan, bukan menghentikan pemuatan.
ON DELETE or ON UPDATE that cascades in a cycle or along a second path
NO ACTION
SQL Server menolak cascade tersebut, jadi dump tidak pernah memuatnya; baris ini ada untuk skrip yang diedit manual.
Baris laporan: foreign_key_action_dropped
foreign keys to tables the dump doesn't create
tidak dibuat
Key tidak bisa merujuk ke tabel yang tidak ada.
Baris laporan: foreign_key_skipped
tables on a partition scheme
satu tabel dengan baris dari setiap partisi
Barisnya sama; partisi ulang tabel di SQL Server jika diperlukan.
Baris laporan: partitions_dropped
temporal tables (SYSTEM_VERSIONING)
dua tabel: baris saat ini dan riwayatnya
Tabel dan tabel riwayatnya disalin sebagai tabel biasa; aktifkan lagi SYSTEM_VERSIONING untuk menghubungkannya.
Baris laporan: system_versioning_dropped
NOT NULL columns with values that become NULL
NOT NULL dihapus
Kolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.
Baris laporan: not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functions
dicantumkan di laporan
IntoSQL mengonversi tabel dan barisnya; sisanya dicantumkan agar Anda bisa membuatnya ulang dari skrip asli.
Baris laporan: not_converted_objects
scripts without CREATE TABLE (data only)
tipe dibaca dari nilai
Skrip yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.
Baris laporan: no_schema
expressions in INSERT values
NULL
Konverter yang tidak menjalankan database tidak bisa mengevaluasinya.
Baris laporan: expression_value
types IntoSQL doesn't know
nvarchar(max)
Text memuat nilai apa pun; ubah tipenya setelah pemuatan.
Baris laporan: unknown_type
NUL characters in text
dipertahankan
nvarchar bisa memuat karakter NUL, jadi nilainya disalin apa adanya.
text that isn't valid in its encoding
byte yang rusak menjadi karakter pengganti
Skripnya UTF-8 dan setiap nilai harus berupa teks yang valid.
Baris laporan: invalid_utf8_replaced
text decoded twice (ñ)
disalin apa adanya
Skrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.
Baris laporan: mojibake_suspected
| Di file | Di skrip | Baris laporan |
|---|---|---|
| bit | bitTipe yang sama. | |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext | nchar(n), nvarchar(n), dan nvarchar(max), dengan collation setiap kolomnvarchar memuat setiap karakter, apa pun code page kolom varchar sebelumnya. Collation UTF-8, yang tidak ada di SQL Server 2017, menjadi pasangan Unicode-nya. | |
| column collations | collation yang sama di setiap kolomKolom dibandingkan dan diurutkan seperti sebelumnya, dan unique key membedakan baris yang sama. | |
| decimal(p,s), money, smallmoney | decimal(p,s); money sebagai decimal(19,4)Setiap digit dipertahankan, money dengan empat desimalnya. | |
| datetime, datetime2, smalldatetime | datetime2(p)datetime2 memuat setiap nilai datetime dan smalldatetime, sejak tahun 1, dengan presisi yang sama. | |
| datetimeoffset | datetimeoffset, dengan offset setiap nilaiTipe dan nilai yang sama. | |
| time | time(p)Tipe yang sama. | |
| dates that aren't valid | NULLNilai yang bukan tanggal menjadi NULL dan laporan menghitungnya. | date_out_of_range |
| json (SQL Server 2025) | nvarchar(max)Nilai JSON yang sama, yang dibaca fungsi JSON di SQL Server. | |
| uniqueidentifier | uniqueidentifierTipe yang sama. | |
| binary, varbinary, image | binary(n), varbinary(n), dan varbinary(max)Byte tetap byte. | |
| xml, sql_variant, hierarchyid, geometry, geography | tipe yang samaTipe milik SQL Server dipertahankan; nilai sql_variant mempertahankan teksnya, jadi tipe dasarnya menjadi nvarchar. | |
| rowversion, timestamp | binary(8), kosongKolom rowversion tidak bisa menerima baris yang disalin, dan SSMS tidak menulis nilainya; tambahkan lagi setelah pemuatan jika Anda membutuhkannya. | rowversion_empty |
| IDENTITY | IDENTITY, berlanjut setelah id tertinggiId yang disalin dimuat dengan IDENTITY_INSERT, dan penghitung berlanjut setelah id tertinggi. | |
| CREATE SEQUENCE | CREATE SEQUENCE dengan opsi yang samaSequence SQL Server bekerja dengan cara yang sama. SSMS tidak menulis posisi yang sudah dicapai sequence, jadi sequence mulai dari titik saat dibuat. | |
| computed columns | kolom terhitung yang sama, PERSISTED seperti di sumberRumus yang sama, dihitung oleh database tujuan. | |
| computed columns with functions IntoSQL doesn't write | kolom biasaRumus yang tidak bisa ditulis menyisakan kolom biasa dan satu baris laporan; SSMS tidak menulis nilai untuk kolom terhitung. | generated_not_translated |
| defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR | tanpa defaultDefault yang tidak bisa ditulis dihilangkan dan dilaporkan. | default_not_translated |
| CHECK constraints | diterjemahkanCHECK yang sama, diuji saat setiap baris dimuat. | |
| CHECK constraints with functions IntoSQL doesn't write | tidak dibuatCHECK yang tidak bisa ditulis dihilangkan dan dilaporkan. | check_skipped |
| CHECK constraints added WITH NOCHECK or disabled | tidak dibuatSQL Server tidak menerapkan CHECK ini, jadi baris bisa melanggarnya. | check_not_enforced |
| filtered and columnstore indexes | tidak dibuatIntoSQL menulis indeks b-tree pada kolom utuh; buat ulang indeks lainnya setelah pemuatan. | index_skipped |
| foreign keys | setelah data WITH NOCHECK, lalu diperiksa dengan peringatan untuk baris yatimKey dibuat setelah baris dan diperiksa terakhir; baris tanpa induk membuatnya tetap tidak diperiksa dengan peringatan, bukan menghentikan pemuatan. | |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTIONSQL Server menolak cascade tersebut, jadi dump tidak pernah memuatnya; baris ini ada untuk skrip yang diedit manual. | foreign_key_action_dropped |
| foreign keys to tables the dump doesn't create | tidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada. | foreign_key_skipped |
| tables on a partition scheme | satu tabel dengan baris dari setiap partisiBarisnya sama; partisi ulang tabel di SQL Server jika diperlukan. | partitions_dropped |
| temporal tables (SYSTEM_VERSIONING) | dua tabel: baris saat ini dan riwayatnyaTabel dan tabel riwayatnya disalin sebagai tabel biasa; aktifkan lagi SYSTEM_VERSIONING untuk menghubungkannya. | system_versioning_dropped |
| NOT NULL columns with values that become NULL | NOT NULL dihapusKolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti. | not_null_relaxed |
| views, functions, procedures, triggers, synonyms, types and partition functions | dicantumkan di laporanIntoSQL mengonversi tabel dan barisnya; sisanya dicantumkan agar Anda bisa membuatnya ulang dari skrip asli. | not_converted_objects |
| scripts without CREATE TABLE (data only) | tipe dibaca dari nilaiSkrip yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai. | no_schema |
| expressions in INSERT values | NULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya. | expression_value |
| types IntoSQL doesn't know | nvarchar(max)Text memuat nilai apa pun; ubah tipenya setelah pemuatan. | unknown_type |
| NUL characters in text | dipertahankannvarchar bisa memuat karakter NUL, jadi nilainya disalin apa adanya. | |
| text that isn't valid in its encoding | byte yang rusak menjadi karakter penggantiSkripnya UTF-8 dan setiap nilai harus berupa teks yang valid. | invalid_utf8_replaced |
| text decoded twice (ñ) | disalin apa adanyaSkrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya. | mojibake_suspected |
Muat skrip ke SQL Server
Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.
sqlcmd -b -f 65001 -S localhost -d mydb -i sql_server.sql_server.sqlForeign key ditambahkan WITH NOCHECK lalu diperiksa. Jika sebuah baris merujuk ke baris yang tidak ada, skrip menyebutkan constraint mana dan membiarkannya tidak diperiksa, bukan gagal di tengah jalan.
Untuk dump yang besar, jalankan sqlcmd di mesin yang sama dengan server. Setiap batch berisi maksimal 1000 baris di-commit sendiri, jadi log transaksi tetap kecil.
Buat dump SQL Server untuk hasil terbaik
Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:
- Di SSMS, klik kanan database, Tasks, Generate Scripts, lalu pilih tabelnya. dbatools, mssql-scripter, dan alat lain yang dibangun di atas library yang sama menulis skrip yang sama.
- Di Advanced, atur Types of data to script ke Schema and data. Skrip yang hanya berisi schema punya tabel tanpa baris.
- Simpan sebagai Unicode, default SSMS, atau sebagai UTF-8: keduanya dibaca dengan cara yang sama, dan gzip juga bisa.
Yang tidak dikonversi
View, trigger, procedure, fungsi, dan objek lain yang ditulis dalam bahasa SQL Server sendiri dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, jadi Anda bisa memeriksa masing-masing dengan versi SQL Server tujuan pemuatan sebelum membuatnya ulang.
Pertanyaan tentang memindahkan SQL Server antarversi
Tidak terjawab di sini? Tulis ke kami dari halaman kontak, dan seseorang akan membalas. Halaman kontak
Apakah dump saya diunggah?
Tidak. Konverter berjalan di browser Anda dan membaca dump dari disk Anda sepotong demi sepotong, jadi dump tidak pernah meninggalkan komputer Anda. Aplikasi desktop dan command line juga mengonversi di komputer Anda.
Seberapa besar dump yang bisa dipakai?
Konverter tidak pernah menyimpan seluruh dump di memori: file dibaca dua kali, per rentang, dan skrip ditulis sambil berjalan. Dump berukuran beberapa gigabyte bisa dikonversi di browser, di aplikasi desktop, dan dengan command line.
Apakah file UTF-16 yang disimpan SSMS bisa dibaca?
Ya. SSMS menyimpan skrip sebagai UTF-16 secara default, dan konverter membaca UTF-16 dan UTF-8 sama baiknya, di-gzip atau tidak, dengan GO di antara batch.
Skrip dari versi SQL Server mana yang bisa dipakai?
Skrip yang ditulis SSMS, dbatools, atau mssql-scripter dari SQL Server 2017 ke atas. Setiap skrip uji berasal dari SQL Server 2017, 2022, dan 2025 dan dibandingkan dengan sumbernya sel demi sel.
Apakah nilai IDENTITY dipertahankan?
Ya. Kolom IDENTITY dimuat dengan IDENTITY_INSERT, setiap baris mempertahankan id-nya, dan penghitung berlanjut setelah id tertinggi. Sequence dibuat dengan opsi yang sama.
Apa yang terjadi pada money, datetimeoffset, dan tipe SQL Server lainnya?
Tetap apa adanya: termasuk xml, sql_variant, hierarchyid, geometry, dan geography, dan setiap kolom teks mempertahankan collation-nya. Nilai datetimeoffset mempertahankan offset-nya. Kolom rowversion menjadi binary(8), karena skrip tidak berisi nilainya.
Bagaimana dengan prosedur, trigger, dan view?
Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, jadi Anda bisa menjalankan bagiannya dari skrip asli setelah tabel masuk.
Di versi SQL Server mana skrip bisa dimuat?
SQL Server 2017 sampai 2025, versi mana pun yang menulis skrip. Skrip yang sama dimuat di setiap versi itu, dan berhenti di galat pertama jika ada yang salah.