Перейти к содержимому
Главная страница IntoSQL

Перенесите скрипт SQL Server на более старую или новую версию SQL Server

Перетащите скрипт, который Generate Scripts в SSMS пишет со схемой и данными, в формате .sql или .sql.gz, в UTF-16 или UTF-8, и скачайте скрипт, который загружается на SQL Server с 2017 по 2025, какая бы версия его ни записала. Identity, collation и типы вроде xml и hierarchyid остаются как есть, и каждое изменение указано в отчете.

Ваш файл
sqlshop_2024_sqlserver.sqlПример файла, 11 кБ
Ваша база данных

18 строк конвертировано, 1 исправление, ни одна не отклонена

Показать

Таблицы в shop_2024_sqlserver.sqlДамп SQL Server · создан программой SQL Server Management Objects · utf-8

  • orders10 строк
    11 столбцов
    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 строк1
    8 столбцов
    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)

Не конвертировано

  • Представление paid_orders
  • Триггер orders_no_negative

Каждая база данных пишет их на своем языке. Перепишите их для 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

Исправления

  1. "row_version" таблицы customers - это версия строки, которую SQL Server задает сам; в дампе нет ее значений, поэтому это binary(8), и столбец пуст.

Требует проверки

  • Не конвертированы представления, триггеры, процедуры и события (2 объекта); отчет перечисляет каждый. Создайте их заново вручную в SQL Server.
  • Проверку check1 таблицы orders нельзя записать для SQL Server (function isjson), поэтому она не создана. Запишите проверку вручную, если она важна.
  • Индекс idx_orders_pending таблицы orders использует выражение, которое нельзя записать для SQL Server (an index on an expression), поэтому он не создан. Создайте индекс вручную, если он нужен запросам.

Файл конвертируется на этом компьютере и никуда не загружается.

Другие примеры:

Что меняется между файлом и скриптом

Каждая строка - это правило, которое применяет конвертер, и строка отчета, которую он пишет, когда правило что-то меняет в ваших данных.

  • bit

    bit

    Тот же тип.

  • char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext

    nchar(n), nvarchar(n) и nvarchar(max) с сортировкой каждого столбца

    nvarchar вмещает любой символ, какой бы ни была кодовая страница столбца varchar. Сортировки UTF-8, которых нет в SQL Server 2017, становятся своим аналогом Unicode.

  • column collations

    та же сортировка у каждого столбца

    Столбцы сравниваются и сортируются как раньше, а уникальные ключи различают те же строки.

  • decimal(p,s), money, smallmoney

    decimal(p,s); money как decimal(19,4)

    Сохраняется каждая цифра, money - со своими четырьмя знаками после запятой.

  • datetime, datetime2, smalldatetime

    datetime2(p)

    datetime2 вмещает любое значение datetime и smalldatetime, начиная с 1 года, с той же точностью.

  • datetimeoffset

    datetimeoffset со смещением каждого значения

    Тот же тип и те же значения.

  • time

    time(p)

    Тот же тип.

  • dates that aren't valid

    NULL

    Значение, которое не является датой, становится NULL, и отчет его подсчитывает.

    Строка отчета: date_out_of_range

  • json (SQL Server 2025)

    nvarchar(max)

    Те же значения JSON, которые читают функции JSON в SQL Server.

  • uniqueidentifier

    uniqueidentifier

    Тот же тип.

  • binary, varbinary, image

    binary(n), varbinary(n) и varbinary(max)

    Байты остаются байтами.

  • xml, sql_variant, hierarchyid, geometry, geography

    те же типы

    Собственные типы SQL Server сохраняются; значения sql_variant сохраняют свой текст, поэтому их базовый тип становится nvarchar.

  • rowversion, timestamp

    binary(8), пустой

    Столбец rowversion не принимает скопированные строки, и SSMS не записывает для него значений; если он нужен, добавьте его заново после загрузки.

    Строка отчета: rowversion_empty

  • IDENTITY

    IDENTITY, продолжается после наибольшего id

    Скопированные id загружаются с IDENTITY_INSERT, а счетчик продолжается после наибольшего.

  • CREATE SEQUENCE

    CREATE SEQUENCE с теми же параметрами

    Последовательности в SQL Server работают так же. SSMS не записывает, до какого значения дошла последовательность, поэтому она начинается с того, с чего была создана.

  • computed columns

    те же вычисляемые столбцы, PERSISTED, как в источнике

    Те же формулы, вычисляемые целевой базой.

  • computed columns with functions IntoSQL doesn't write

    обычный столбец

    Формула, которую нельзя записать, оставляет обычный столбец и строку в отчете; SSMS не записывает значения вычисляемых столбцов.

    Строка отчета: generated_not_translated

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

    без значения по умолчанию

    Значение по умолчанию, которое нельзя записать, опускается и попадает в отчет.

    Строка отчета: default_not_translated

  • CHECK constraints

    переводится

    Те же проверки, применяемые при загрузке каждой строки.

  • CHECK constraints with functions IntoSQL doesn't write

    не создается

    Проверка, которую нельзя записать, опускается и попадает в отчет.

    Строка отчета: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    не создается

    SQL Server не применяет эти проверки, поэтому строки могут их нарушать.

    Строка отчета: check_not_enforced

  • filtered and columnstore indexes

    не создается

    IntoSQL создает индексы b-tree по целым столбцам; остальные создайте заново после загрузки.

    Строка отчета: index_skipped

  • foreign keys

    после данных WITH NOCHECK, затем проверка с предупреждением о строках без родителя

    Ключ создается после строк и проверяется последним; при строках без родителя он остается непроверенным с предупреждением, и загрузка не останавливается.

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

    NO ACTION

    SQL Server не допускает такие каскады, поэтому в дампе их не бывает; эта строка нужна для скриптов, отредактированных вручную.

    Строка отчета: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    не создается

    Ключ не может ссылаться на таблицу, которой нет.

    Строка отчета: foreign_key_skipped

  • tables on a partition scheme

    одна таблица со строками всех секций

    Строки те же; при необходимости секционируйте таблицу заново в SQL Server.

    Строка отчета: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    две таблицы: текущие строки и история

    Таблица и ее таблица истории копируются как обычные таблицы; снова включите SYSTEM_VERSIONING, чтобы связать их.

    Строка отчета: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL снимается

    Столбец, значения которого пришлось заменить на NULL, не может сохранить NOT NULL, иначе загрузка остановится.

    Строка отчета: not_null_relaxed

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

    перечисляются в отчете

    IntoSQL конвертирует таблицы и их строки; остальное перечислено, чтобы вы создали это заново по исходному скрипту.

    Строка отчета: not_converted_objects

  • scripts without CREATE TABLE (data only)

    типы определяются по значениям

    Скрипт только с данными содержит лишь строки, поэтому типы берутся из значений.

    Строка отчета: no_schema

  • expressions in INSERT values

    NULL

    Конвертер, который не запускает базу данных, не может их вычислить.

    Строка отчета: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    Тип text вмещает любое значение; измените тип после загрузки.

    Строка отчета: unknown_type

  • NUL characters in text

    сохраняется

    nvarchar может содержать символ NUL, поэтому значение копируется как есть.

  • text that isn't valid in its encoding

    неверные байты заменяются символом замены

    Скрипт в UTF-8, и каждое значение должно быть корректным текстом.

    Строка отчета: invalid_utf8_replaced

  • text decoded twice (ñ)

    копируется как есть

    Скрипт содержит именно эти символы, поэтому они копируются; отчет на них указывает.

    Строка отчета: mojibake_suspected

В файлеВ скриптеСтрока отчета
bitbitТот же тип.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(n), nvarchar(n) и nvarchar(max) с сортировкой каждого столбцаnvarchar вмещает любой символ, какой бы ни была кодовая страница столбца varchar. Сортировки UTF-8, которых нет в SQL Server 2017, становятся своим аналогом Unicode.
column collationsта же сортировка у каждого столбцаСтолбцы сравниваются и сортируются как раньше, а уникальные ключи различают те же строки.
decimal(p,s), money, smallmoneydecimal(p,s); money как decimal(19,4)Сохраняется каждая цифра, money - со своими четырьмя знаками после запятой.
datetime, datetime2, smalldatetimedatetime2(p)datetime2 вмещает любое значение datetime и smalldatetime, начиная с 1 года, с той же точностью.
datetimeoffsetdatetimeoffset со смещением каждого значенияТот же тип и те же значения.
timetime(p)Тот же тип.
dates that aren't validNULLЗначение, которое не является датой, становится NULL, и отчет его подсчитывает.date_out_of_range
json (SQL Server 2025)nvarchar(max)Те же значения JSON, которые читают функции JSON в SQL Server.
uniqueidentifieruniqueidentifierТот же тип.
binary, varbinary, imagebinary(n), varbinary(n) и varbinary(max)Байты остаются байтами.
xml, sql_variant, hierarchyid, geometry, geographyте же типыСобственные типы SQL Server сохраняются; значения sql_variant сохраняют свой текст, поэтому их базовый тип становится nvarchar.
rowversion, timestampbinary(8), пустойСтолбец rowversion не принимает скопированные строки, и SSMS не записывает для него значений; если он нужен, добавьте его заново после загрузки.rowversion_empty
IDENTITYIDENTITY, продолжается после наибольшего idСкопированные id загружаются с IDENTITY_INSERT, а счетчик продолжается после наибольшего.
CREATE SEQUENCECREATE SEQUENCE с теми же параметрамиПоследовательности в SQL Server работают так же. SSMS не записывает, до какого значения дошла последовательность, поэтому она начинается с того, с чего была создана.
computed columnsте же вычисляемые столбцы, PERSISTED, как в источникеТе же формулы, вычисляемые целевой базой.
computed columns with functions IntoSQL doesn't writeобычный столбецФормула, которую нельзя записать, оставляет обычный столбец и строку в отчете; SSMS не записывает значения вычисляемых столбцов.generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FORбез значения по умолчаниюЗначение по умолчанию, которое нельзя записать, опускается и попадает в отчет.default_not_translated
CHECK constraintsпереводитсяТе же проверки, применяемые при загрузке каждой строки.
CHECK constraints with functions IntoSQL doesn't writeне создаетсяПроверка, которую нельзя записать, опускается и попадает в отчет.check_skipped
CHECK constraints added WITH NOCHECK or disabledне создаетсяSQL Server не применяет эти проверки, поэтому строки могут их нарушать.check_not_enforced
filtered and columnstore indexesне создаетсяIntoSQL создает индексы b-tree по целым столбцам; остальные создайте заново после загрузки.index_skipped
foreign keysпосле данных WITH NOCHECK, затем проверка с предупреждением о строках без родителяКлюч создается после строк и проверяется последним; при строках без родителя он остается непроверенным с предупреждением, и загрузка не останавливается.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server не допускает такие каскады, поэтому в дампе их не бывает; эта строка нужна для скриптов, отредактированных вручную.foreign_key_action_dropped
foreign keys to tables the dump doesn't createне создаетсяКлюч не может ссылаться на таблицу, которой нет.foreign_key_skipped
tables on a partition schemeодна таблица со строками всех секцийСтроки те же; при необходимости секционируйте таблицу заново в SQL Server.partitions_dropped
temporal tables (SYSTEM_VERSIONING)две таблицы: текущие строки и историяТаблица и ее таблица истории копируются как обычные таблицы; снова включите SYSTEM_VERSIONING, чтобы связать их.system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL снимаетсяСтолбец, значения которого пришлось заменить на NULL, не может сохранить NOT NULL, иначе загрузка остановится.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsперечисляются в отчетеIntoSQL конвертирует таблицы и их строки; остальное перечислено, чтобы вы создали это заново по исходному скрипту.not_converted_objects
scripts without CREATE TABLE (data only)типы определяются по значениямСкрипт только с данными содержит лишь строки, поэтому типы берутся из значений.no_schema
expressions in INSERT valuesNULLКонвертер, который не запускает базу данных, не может их вычислить.expression_value
types IntoSQL doesn't knownvarchar(max)Тип text вмещает любое значение; измените тип после загрузки.unknown_type
NUL characters in textсохраняетсяnvarchar может содержать символ NUL, поэтому значение копируется как есть.
text that isn't valid in its encodingневерные байты заменяются символом заменыСкрипт в UTF-8, и каждое значение должно быть корректным текстом.invalid_utf8_replaced
text decoded twice (ñ)копируется как естьСкрипт содержит именно эти символы, поэтому они копируются; отчет на них указывает.mojibake_suspected

Загрузите скрипт в SQL Server

Скрипт создает таблицы, копирует строки, затем добавляет ключи, индексы и внешние ключи, поэтому загрузка идет быстро и останавливается на первой ошибке.

sqlcmd -b -f 65001 -S localhost -d mydb -i sql_server.sql_server.sql

Внешние ключи добавляются WITH NOCHECK, а затем проверяются. Если строка ссылается на несуществующую строку, скрипт сообщает, какое это ограничение, и оставляет его непроверенным, а не прерывается на полпути.

Для большого дампа запускайте sqlcmd на той же машине, где работает сервер. Каждый пакет до 1000 строк фиксируется отдельно, поэтому журнал транзакций остается небольшим.

Как создать дамп SQL Server для лучшего результата

Конвертер читает то, что есть в дампе. Эти параметры сохраняют в нем больше ваших данных:

  • В SSMS щелкните базу данных правой кнопкой, выберите Tasks, Generate Scripts и отметьте таблицы. dbatools, mssql-scripter и другие инструменты на той же библиотеке пишут такой же скрипт.
  • В разделе Advanced задайте для Types of data to script значение Schema and data. Скрипт только со схемой содержит таблицы без строк.
  • Сохраните его в Unicode, как по умолчанию в SSMS, или в UTF-8: оба читаются одинаково, gzip тоже подходит.

Что не конвертируется

Представления, триггеры, процедуры, функции и другие объекты, написанные на собственном языке SQL Server, перечислены в отчете по имени и никогда не удаляются молча, чтобы вы могли проверить каждый на той версии SQL Server, в которую загружаете, прежде чем создать его заново.

Вопросы о переносе SQL Server между версиями

Нет ответа на ваш вопрос? Напишите нам через страницу контактов, и вам ответит человек. Страница контактов

Мой дамп загружается на сервер?

Нет. Конвертер работает в вашем браузере и читает дамп с диска по частям, поэтому он никогда не покидает ваш компьютер. Приложение для компьютера и командная строка тоже конвертируют на вашем компьютере.

Насколько большим может быть дамп?

Конвертер никогда не держит весь дамп в памяти: он читает файл дважды, по диапазонам, и пишет скрипт по ходу чтения. Дампы в несколько гигабайт конвертируются в браузере, в приложении для компьютера и в командной строке.

Читает ли он файл UTF-16, который сохраняет SSMS?

Да. SSMS по умолчанию сохраняет скрипты в UTF-16, а конвертер одинаково читает UTF-16 и UTF-8, сжатые gzip или нет, с GO между пакетами.

Из каких версий SQL Server может быть скрипт?

Скрипты, которые SSMS, dbatools или mssql-scripter пишут из SQL Server 2017 и новее. Каждый тестовый скрипт создан в SQL Server 2017, 2022 и 2025 и сверен с источником ячейка за ячейкой.

Сохраняются ли значения IDENTITY?

Да. Столбцы IDENTITY загружаются с IDENTITY_INSERT, каждая строка сохраняет свой id, а счетчик продолжается после наибольшего. Последовательности создаются с теми же параметрами.

Что происходит с money, datetimeoffset и другими типами SQL Server?

Они остаются как есть, включая xml, sql_variant, hierarchyid, geometry и geography, и каждый текстовый столбец сохраняет свою сортировку. Значения datetimeoffset сохраняют свои смещения. Столбцы rowversion становятся binary(8), потому что в скрипте нет их значений.

А процедуры, триггеры и представления?

Они перечислены в отчете по имени и не конвертируются, чтобы вы могли выполнить их часть исходного скрипта, когда таблицы будут загружены.

На каких версиях SQL Server загружается скрипт?

SQL Server с 2017 по 2025, какой бы версией ни был записан скрипт. Один и тот же скрипт загружается на каждой из них и останавливается на первой ошибке, если что-то пойдет не так.