Przenieś skrypt SQL Server do starszej lub nowszej wersji SQL Server
Upuść skrypt, który Generate Scripts w SSMS zapisuje ze schematem i danymi, jako .sql lub .sql.gz, w UTF-16 lub UTF-8, i pobierz taki, który ładuje się na SQL Server od 2017 do 2025, niezależnie od wersji, która go zapisała. Kolumny identity, collation i typy takie jak xml i hierarchyid zostają bez zmian, a każda zmiana jest wymieniona w raporcie.
18 wierszy przekonwertowanych, 1 poprawka, brak odrzuconych
Tabele w pliku shop_2024_sqlserver.sqlZrzut SQL Server · zapisany przez SQL Server Management Objects · utf-8
orders10 wierszy
11 kolumn 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 wierszy1
8 kolumn 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)
Nieprzekonwertowane
- Widok paid_orders
- Wyzwalacz orders_no_negative
Każda baza danych zapisuje je we własnym języku. Przepisz je dla 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
Poprawki
- "row_version" w tabeli customers to wersja wiersza, którą SQL Server ustawia sam; zrzut nie ma dla niej wartości, więc ma typ binary(8) i jest pusta.
Do sprawdzenia
- Widoki, wyzwalacze, procedury i zdarzenia nie są konwertowane: 2 obiekty, każdy wymieniony w raporcie. Utwórz je ręcznie w SQL Server.
- Ograniczenia CHECK check1 w tabeli orders nie da się zapisać dla SQL Server (function isjson), więc go nie utworzono. Zapisz ograniczenie CHECK ręcznie, jeśli jest ważne.
- Indeks idx_orders_pending w tabeli orders używa wyrażenia, którego nie da się zapisać dla SQL Server (an index on an expression), więc go nie utworzono. Utwórz indeks ręcznie, jeśli zapytania go potrzebują.
Plik jest konwertowany na tym komputerze i nigdy nie jest wysyłany.
Inne przykłady:
Co się zmienia między plikiem a skryptem
Każdy wiersz to reguła stosowana przez konwerter, z wpisem, który dodaje do raportu, gdy reguła coś zmienia w twoich danych.
bit
bit
Ten sam typ.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext
nchar(n), nvarchar(n) i nvarchar(max), z porównywaniem każdej kolumny
nvarchar mieści każdy znak, niezależnie od strony kodowej kolumny varchar. Porównywania UTF-8, których nie ma SQL Server 2017, stają się ich odpowiednikiem Unicode.
column collations
to samo porównywanie w każdej kolumnie
Kolumny porównują i sortują tak jak wcześniej, a klucze unikalne rozróżniają te same wiersze.
decimal(p,s), money, smallmoney
decimal(p,s); money jako decimal(19,4)
Każda cyfra jest zachowana, money z czterema miejscami po przecinku.
datetime, datetime2, smalldatetime
datetime2(p)
datetime2 mieści każdą wartość datetime i smalldatetime, od roku 1, z tą samą precyzją.
datetimeoffset
datetimeoffset z przesunięciem każdej wartości
Ten sam typ i te same wartości.
time
time(p)
Ten sam typ.
dates that aren't valid
NULL
Wartość, która nie jest datą, staje się NULL, a raport ją liczy.
Wpis w raporcie: date_out_of_range
json (SQL Server 2025)
nvarchar(max)
Te same wartości JSON, które odczytują funkcje JSON w SQL Server.
uniqueidentifier
uniqueidentifier
Ten sam typ.
binary, varbinary, image
binary(n), varbinary(n) i varbinary(max)
Bajty pozostają bajtami.
xml, sql_variant, hierarchyid, geometry, geography
te same typy
Własne typy SQL Server są zachowywane; wartości sql_variant zachowują swój tekst, więc ich typ bazowy staje się nvarchar.
rowversion, timestamp
binary(8), pusty
Kolumna rowversion nie przyjmie skopiowanych wierszy, a SSMS nie zapisuje dla niej wartości; jeśli jej potrzebujesz, dodaj ją ponownie po załadowaniu.
Wpis w raporcie: rowversion_empty
IDENTITY
IDENTITY, kontynuowane po najwyższym id
Skopiowane id ładują się z IDENTITY_INSERT, a licznik idzie dalej po najwyższym.
CREATE SEQUENCE
CREATE SEQUENCE z tymi samymi opcjami
Sekwencje w SQL Server działają tak samo. SSMS nie zapisuje, dokąd doszła sekwencja, więc zaczyna ona od wartości, od której została utworzona.
computed columns
te same kolumny obliczane, PERSISTED jak w źródle
Te same formuły, obliczane przez bazę docelową.
computed columns with functions IntoSQL doesn't write
zwykła kolumna
Formuła, której nie da się zapisać, zostawia zwykłą kolumnę i wpis w raporcie; SSMS nie zapisuje wartości kolumn obliczanych.
Wpis w raporcie: generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR
brak wartości domyślnej
Wartość domyślna, której nie da się zapisać, jest pomijana i zgłaszana w raporcie.
Wpis w raporcie: default_not_translated
CHECK constraints
przetłumaczone
Te same ograniczenia CHECK, sprawdzane przy ładowaniu każdego wiersza.
CHECK constraints with functions IntoSQL doesn't write
nie jest tworzone
Ograniczenie CHECK, którego nie da się zapisać, jest pomijane i zgłaszane w raporcie.
Wpis w raporcie: check_skipped
CHECK constraints added WITH NOCHECK or disabled
nie jest tworzone
SQL Server nie stosuje tych ograniczeń CHECK, więc wiersze mogą je łamać.
Wpis w raporcie: check_not_enforced
filtered and columnstore indexes
nie jest tworzone
IntoSQL zapisuje indeksy b-tree na całych kolumnach; pozostałe utwórz ponownie po załadowaniu.
Wpis w raporcie: index_skipped
foreign keys
po danych z WITH NOCHECK, potem sprawdzany z ostrzeżeniem o osieroconych wierszach
Klucz jest tworzony po wierszach i sprawdzany na końcu; wiersze bez rodzica zostawiają go niesprawdzonym z ostrzeżeniem, zamiast zatrzymać ładowanie.
ON DELETE or ON UPDATE that cascades in a cycle or along a second path
NO ACTION
SQL Server odrzuca takie kaskady, więc zrzut nigdy ich nie zawiera; ten wiersz jest dla skryptów edytowanych ręcznie.
Wpis w raporcie: foreign_key_action_dropped
foreign keys to tables the dump doesn't create
nie jest tworzone
Klucz nie może wskazywać tabeli, której nie ma.
Wpis w raporcie: foreign_key_skipped
tables on a partition scheme
jedna tabela z wierszami wszystkich partycji
Wiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie w SQL Server.
Wpis w raporcie: partitions_dropped
temporal tables (SYSTEM_VERSIONING)
dwie tabele: bieżące wiersze i historia
Tabela i jej tabela historii są kopiowane jako zwykłe tabele; włącz ponownie SYSTEM_VERSIONING, aby je powiązać.
Wpis w raporcie: system_versioning_dropped
NOT NULL columns with values that become NULL
NOT NULL usunięte
Kolumna, której wartości musiały stać się NULL, nie może zachować NOT NULL, bo ładowanie by się zatrzymało.
Wpis w raporcie: not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functions
wymienione w raporcie
IntoSQL konwertuje tabele i ich wiersze; reszta trafia na listę, abyś odtworzył ją z oryginalnego skryptu.
Wpis w raporcie: not_converted_objects
scripts without CREATE TABLE (data only)
typy odczytane z wartości
Skrypt samych danych zawiera tylko wiersze, więc typy pochodzą z wartości.
Wpis w raporcie: no_schema
expressions in INSERT values
NULL
Konwerter, który nie uruchamia bazy danych, nie może ich obliczyć.
Wpis w raporcie: expression_value
types IntoSQL doesn't know
nvarchar(max)
Tekst mieści każdą wartość; zmień typ po załadowaniu.
Wpis w raporcie: unknown_type
NUL characters in text
zachowane
nvarchar może zawierać znak NUL, więc wartość jest kopiowana bez zmian.
text that isn't valid in its encoding
błędne bajty jako znak zastępczy
Skrypt jest w UTF-8 i każda wartość musi być poprawnym tekstem.
Wpis w raporcie: invalid_utf8_replaced
text decoded twice (ñ)
skopiowane bez zmian
Skrypt zawiera dokładnie te znaki, więc są kopiowane; raport je wskazuje.
Wpis w raporcie: mojibake_suspected
| W pliku | W skrypcie | Wpis w raporcie |
|---|---|---|
| bit | bitTen sam typ. | |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext | nchar(n), nvarchar(n) i nvarchar(max), z porównywaniem każdej kolumnynvarchar mieści każdy znak, niezależnie od strony kodowej kolumny varchar. Porównywania UTF-8, których nie ma SQL Server 2017, stają się ich odpowiednikiem Unicode. | |
| column collations | to samo porównywanie w każdej kolumnieKolumny porównują i sortują tak jak wcześniej, a klucze unikalne rozróżniają te same wiersze. | |
| decimal(p,s), money, smallmoney | decimal(p,s); money jako decimal(19,4)Każda cyfra jest zachowana, money z czterema miejscami po przecinku. | |
| datetime, datetime2, smalldatetime | datetime2(p)datetime2 mieści każdą wartość datetime i smalldatetime, od roku 1, z tą samą precyzją. | |
| datetimeoffset | datetimeoffset z przesunięciem każdej wartościTen sam typ i te same wartości. | |
| time | time(p)Ten sam typ. | |
| dates that aren't valid | NULLWartość, która nie jest datą, staje się NULL, a raport ją liczy. | date_out_of_range |
| json (SQL Server 2025) | nvarchar(max)Te same wartości JSON, które odczytują funkcje JSON w SQL Server. | |
| uniqueidentifier | uniqueidentifierTen sam typ. | |
| binary, varbinary, image | binary(n), varbinary(n) i varbinary(max)Bajty pozostają bajtami. | |
| xml, sql_variant, hierarchyid, geometry, geography | te same typyWłasne typy SQL Server są zachowywane; wartości sql_variant zachowują swój tekst, więc ich typ bazowy staje się nvarchar. | |
| rowversion, timestamp | binary(8), pustyKolumna rowversion nie przyjmie skopiowanych wierszy, a SSMS nie zapisuje dla niej wartości; jeśli jej potrzebujesz, dodaj ją ponownie po załadowaniu. | rowversion_empty |
| IDENTITY | IDENTITY, kontynuowane po najwyższym idSkopiowane id ładują się z IDENTITY_INSERT, a licznik idzie dalej po najwyższym. | |
| CREATE SEQUENCE | CREATE SEQUENCE z tymi samymi opcjamiSekwencje w SQL Server działają tak samo. SSMS nie zapisuje, dokąd doszła sekwencja, więc zaczyna ona od wartości, od której została utworzona. | |
| computed columns | te same kolumny obliczane, PERSISTED jak w źródleTe same formuły, obliczane przez bazę docelową. | |
| computed columns with functions IntoSQL doesn't write | zwykła kolumnaFormuła, której nie da się zapisać, zostawia zwykłą kolumnę i wpis w raporcie; SSMS nie zapisuje wartości kolumn obliczanych. | generated_not_translated |
| defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR | brak wartości domyślnejWartość domyślna, której nie da się zapisać, jest pomijana i zgłaszana w raporcie. | default_not_translated |
| CHECK constraints | przetłumaczoneTe same ograniczenia CHECK, sprawdzane przy ładowaniu każdego wiersza. | |
| CHECK constraints with functions IntoSQL doesn't write | nie jest tworzoneOgraniczenie CHECK, którego nie da się zapisać, jest pomijane i zgłaszane w raporcie. | check_skipped |
| CHECK constraints added WITH NOCHECK or disabled | nie jest tworzoneSQL Server nie stosuje tych ograniczeń CHECK, więc wiersze mogą je łamać. | check_not_enforced |
| filtered and columnstore indexes | nie jest tworzoneIntoSQL zapisuje indeksy b-tree na całych kolumnach; pozostałe utwórz ponownie po załadowaniu. | index_skipped |
| foreign keys | po danych z WITH NOCHECK, potem sprawdzany z ostrzeżeniem o osieroconych wierszachKlucz jest tworzony po wierszach i sprawdzany na końcu; wiersze bez rodzica zostawiają go niesprawdzonym z ostrzeżeniem, zamiast zatrzymać ładowanie. | |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTIONSQL Server odrzuca takie kaskady, więc zrzut nigdy ich nie zawiera; ten wiersz jest dla skryptów edytowanych ręcznie. | foreign_key_action_dropped |
| foreign keys to tables the dump doesn't create | nie jest tworzoneKlucz nie może wskazywać tabeli, której nie ma. | foreign_key_skipped |
| tables on a partition scheme | jedna tabela z wierszami wszystkich partycjiWiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie w SQL Server. | partitions_dropped |
| temporal tables (SYSTEM_VERSIONING) | dwie tabele: bieżące wiersze i historiaTabela i jej tabela historii są kopiowane jako zwykłe tabele; włącz ponownie SYSTEM_VERSIONING, aby je powiązać. | system_versioning_dropped |
| NOT NULL columns with values that become NULL | NOT NULL usunięteKolumna, której wartości musiały stać się NULL, nie może zachować NOT NULL, bo ładowanie by się zatrzymało. | not_null_relaxed |
| views, functions, procedures, triggers, synonyms, types and partition functions | wymienione w raporcieIntoSQL konwertuje tabele i ich wiersze; reszta trafia na listę, abyś odtworzył ją z oryginalnego skryptu. | not_converted_objects |
| scripts without CREATE TABLE (data only) | typy odczytane z wartościSkrypt samych danych zawiera tylko wiersze, więc typy pochodzą z wartości. | no_schema |
| expressions in INSERT values | NULLKonwerter, który nie uruchamia bazy danych, nie może ich obliczyć. | expression_value |
| types IntoSQL doesn't know | nvarchar(max)Tekst mieści każdą wartość; zmień typ po załadowaniu. | unknown_type |
| NUL characters in text | zachowanenvarchar może zawierać znak NUL, więc wartość jest kopiowana bez zmian. | |
| text that isn't valid in its encoding | błędne bajty jako znak zastępczySkrypt jest w UTF-8 i każda wartość musi być poprawnym tekstem. | invalid_utf8_replaced |
| text decoded twice (ñ) | skopiowane bez zmianSkrypt zawiera dokładnie te znaki, więc są kopiowane; raport je wskazuje. | 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.
sqlcmd -b -f 65001 -S localhost -d mydb -i sql_server.sql_server.sqlKlucze 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 SQL Server dla najlepszego wyniku
Konwerter odczytuje to, co zawiera zrzut. Te opcje zachowują w nim więcej twoich danych:
- W SSMS kliknij prawym przyciskiem bazę danych, Tasks, Generate Scripts i wybierz tabele. dbatools, mssql-scripter i inne narzędzia oparte na tej samej bibliotece zapisują taki sam skrypt.
- W sekcji Advanced ustaw Types of data to script na Schema and data. Skrypt samego schematu ma tabele bez wierszy.
- Zapisz go jako Unicode, domyślnie w SSMS, lub jako UTF-8: oba są czytane tak samo, a gzip też działa.
Co nie jest konwertowane
Widoki, wyzwalacze, procedury, funkcje i inne obiekty napisane we własnym języku SQL Server są wymienione w raporcie z nazwy i nigdy nie są pomijane po cichu, więc możesz sprawdzić każdy z nich w wersji SQL Server, do której ładujesz, zanim go odtworzysz.
Pytania o przenoszenie SQL Server między wersjami
Nie ma tu odpowiedzi? Napisz do nas przez stronę kontaktu, a odpowie człowiek. Strona kontaktu
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 odczytuje plik UTF-16 zapisany przez SSMS?
Tak. SSMS domyślnie zapisuje skrypty jako UTF-16, a konwerter czyta UTF-16 i UTF-8 tak samo, spakowane gzip lub nie, z GO między partiami.
Z jakich wersji SQL Server może pochodzić skrypt?
Skrypty zapisane przez SSMS, dbatools lub mssql-scripter z SQL Server od wersji 2017. Każdy testowy skrypt pochodzi z SQL Server 2017, 2022 i 2025 i jest porównywany ze źródłem komórka po komórce.
Czy wartości IDENTITY są zachowywane?
Tak. Kolumny IDENTITY ładują się z IDENTITY_INSERT, każdy wiersz zachowuje swoje id, a licznik idzie dalej po najwyższym. Sekwencje są tworzone z tymi samymi opcjami.
Co dzieje się z money, datetimeoffset i innymi typami SQL Server?
Zostają bez zmian, łącznie z xml, sql_variant, hierarchyid, geometry i geography, a każda kolumna tekstowa zachowuje swoje porównywanie. Wartości datetimeoffset zachowują przesunięcia. Kolumny rowversion mają typ binary(8), bo skrypt nie ma dla nich wartości.
A procedury, wyzwalacze i widoki?
Raport wymienia je z nazwy, ale nie są konwertowane, więc możesz uruchomić ich część oryginalnego skryptu, gdy tabele będą już na miejscu.
Na jakich wersjach SQL Server ładuje się skrypt?
SQL Server od 2017 do 2025, niezależnie od wersji, która zapisała skrypt. Ten sam skrypt ładuje się na każdej z nich i zatrzymuje przy pierwszym błędzie, jeśli coś pójdzie nie tak.