Przejdź do treści
Strona główna IntoSQL

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.

Twój plik
sqlshop_2024_sqlserver.sqlPlik przykładowy, 11 kB
Twoja baza danych

18 wierszy przekonwertowanych, 1 poprawka, brak odrzuconych

Pokaż

Tabele w pliku shop_2024_sqlserver.sqlZrzut SQL Server · zapisany przez SQL Server Management Objects · utf-8

  • orders10 wierszy
    11 kolumn
    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 wierszy1
    8 kolumn
    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)

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

  1. "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 plikuW skrypcieWpis w raporcie
bitbitTen sam typ.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(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 collationsto 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, smallmoneydecimal(p,s); money jako decimal(19,4)Każda cyfra jest zachowana, money z czterema miejscami po przecinku.
datetime, datetime2, smalldatetimedatetime2(p)datetime2 mieści każdą wartość datetime i smalldatetime, od roku 1, z tą samą precyzją.
datetimeoffsetdatetimeoffset z przesunięciem każdej wartościTen sam typ i te same wartości.
timetime(p)Ten sam typ.
dates that aren't validNULLWartość, 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.
uniqueidentifieruniqueidentifierTen sam typ.
binary, varbinary, imagebinary(n), varbinary(n) i varbinary(max)Bajty pozostają bajtami.
xml, sql_variant, hierarchyid, geometry, geographyte 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, timestampbinary(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
IDENTITYIDENTITY, kontynuowane po najwyższym idSkopiowane id ładują się z IDENTITY_INSERT, a licznik idzie dalej po najwyższym.
CREATE SEQUENCECREATE 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 columnste same kolumny obliczane, PERSISTED jak w źródleTe same formuły, obliczane przez bazę docelową.
computed columns with functions IntoSQL doesn't writezwykł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 FORbrak wartości domyślnejWartość domyślna, której nie da się zapisać, jest pomijana i zgłaszana w raporcie.default_not_translated
CHECK constraintsprzetłumaczoneTe same ograniczenia CHECK, sprawdzane przy ładowaniu każdego wiersza.
CHECK constraints with functions IntoSQL doesn't writenie jest tworzoneOgraniczenie CHECK, którego nie da się zapisać, jest pomijane i zgłaszane w raporcie.check_skipped
CHECK constraints added WITH NOCHECK or disablednie jest tworzoneSQL Server nie stosuje tych ograniczeń CHECK, więc wiersze mogą je łamać.check_not_enforced
filtered and columnstore indexesnie jest tworzoneIntoSQL zapisuje indeksy b-tree na całych kolumnach; pozostałe utwórz ponownie po załadowaniu.index_skipped
foreign keyspo 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 pathNO 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 createnie jest tworzoneKlucz nie może wskazywać tabeli, której nie ma.foreign_key_skipped
tables on a partition schemejedna 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 NULLNOT 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 functionswymienione 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 valuesNULLKonwerter, który nie uruchamia bazy danych, nie może ich obliczyć.expression_value
types IntoSQL doesn't knownvarchar(max)Tekst mieści każdą wartość; zmień typ po załadowaniu.unknown_type
NUL characters in textzachowanenvarchar może zawierać znak NUL, więc wartość jest kopiowana bez zmian.
text that isn't valid in its encodingbłę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.sql

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