Aller au contenu
Accueil IntoSQL

Passer un script SQL Server vers un SQL Server plus ancien ou plus récent

Déposez le script qu'écrit Generate Scripts de SSMS avec schéma et données, en .sql ou .sql.gz, UTF-16 ou UTF-8, et téléchargez-en un qui se charge sur SQL Server 2017 à 2025, quelle que soit la version qui l'a écrit. Identités, collations et types comme xml et hierarchyid restent tels quels, et chaque changement figure dans le rapport.

Votre fichier
sqlshop_2024_sqlserver.sqlFichier d'exemple, 11 ko
Votre base de données

18 lignes converties, 1 correction, aucune rejetée

Afficher

Tables de shop_2024_sqlserver.sqlDump SQL Server · écrit par SQL Server Management Objects · utf-8

  • orders10 lignes
    11 colonnes
    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 lignes1
    8 colonnes
    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)

Non converti

  • Vue paid_orders
  • Déclencheur orders_no_negative

Chaque base de données les écrit dans son propre langage. Réécrivez-les pour 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

Corrections

  1. "row_version" de customers est une version de ligne que SQL Server définit lui-même ; le dump n'a aucune valeur pour elle, elle est donc en binary(8) et vide.

À vérifier

  • 2 objets non convertis (vues, déclencheurs, routines ou événements) ; le rapport les liste un par un. Recréez-les à la main dans SQL Server.
  • La contrainte CHECK check1 sur orders ne peut pas être écrite pour SQL Server (function isjson) ; elle n'est donc pas créée. Écrivez la contrainte à la main si elle compte.
  • L'index idx_orders_pending sur orders utilise une expression qui ne peut pas être écrite pour SQL Server (an index on an expression) ; il n'est donc pas créé. Créez l'index à la main si les requêtes en ont besoin.

Votre fichier est converti sur cet ordinateur et n'est jamais envoyé.

Autres exemples :

Ce qui change entre le fichier et le script

Chaque ligne est une règle appliquée par le convertisseur, avec la ligne de rapport qu'il écrit quand la règle change quelque chose dans vos données.

  • bit

    bit

    Le même type.

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

    nchar(n), nvarchar(n) et nvarchar(max), avec la collation de chaque colonne

    nvarchar contient tous les caractères, quelle que soit la page de codes d'une colonne varchar. Les collations UTF-8, absentes de SQL Server 2017, deviennent leur jumelle Unicode.

  • column collations

    la même collation sur chaque colonne

    Les colonnes comparent et trient comme avant, et les clés uniques distinguent les mêmes lignes.

  • decimal(p,s), money, smallmoney

    decimal(p,s) ; money en decimal(19,4)

    Chaque chiffre est gardé, money avec ses quatre décimales.

  • datetime, datetime2, smalldatetime

    datetime2(p)

    datetime2 contient chaque valeur datetime et smalldatetime, depuis l'an 1, avec la même précision.

  • datetimeoffset

    datetimeoffset, avec le décalage de chaque valeur

    Le même type et les mêmes valeurs.

  • time

    time(p)

    Le même type.

  • dates that aren't valid

    NULL

    Une valeur qui n'est pas une date devient NULL et le rapport la compte.

    Ligne du rapport: date_out_of_range

  • json (SQL Server 2025)

    nvarchar(max)

    Les mêmes valeurs JSON, que lisent les fonctions JSON de SQL Server.

  • uniqueidentifier

    uniqueidentifier

    Le même type.

  • binary, varbinary, image

    binary(n), varbinary(n) et varbinary(max)

    Les octets restent des octets.

  • xml, sql_variant, hierarchyid, geometry, geography

    les mêmes types

    Les types propres à SQL Server sont gardés ; les valeurs sql_variant gardent leur texte, donc leur type de base devient nvarchar.

  • rowversion, timestamp

    binary(8), sans valeurs

    Une colonne rowversion ne peut pas recevoir les lignes copiées, et SSMS n'écrit aucune valeur pour elle ; ajoutez-la à nouveau après le chargement si besoin.

    Ligne du rapport: rowversion_empty

  • IDENTITY

    IDENTITY, qui reprend après l'identifiant le plus élevé

    Les identifiants copiés se chargent avec IDENTITY_INSERT, et le compteur reprend après le plus élevé.

  • CREATE SEQUENCE

    CREATE SEQUENCE avec les mêmes options

    Les séquences SQL Server fonctionnent de la même façon. SSMS n'écrit pas où en est une séquence, elle repart donc de sa valeur de création.

  • computed columns

    les mêmes colonnes calculées, PERSISTED comme dans la source

    Les mêmes formules, calculées par la cible.

  • computed columns with functions IntoSQL doesn't write

    une colonne simple

    Une formule qui ne peut pas être écrite laisse une colonne simple et une ligne dans le rapport ; SSMS n'écrit aucune valeur pour les colonnes calculées.

    Ligne du rapport: generated_not_translated

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

    aucune valeur par défaut

    Une valeur par défaut qui ne peut pas être écrite est omise et signalée.

    Ligne du rapport: default_not_translated

  • CHECK constraints

    traduites

    Les mêmes contraintes CHECK, vérifiées au chargement de chaque ligne.

  • CHECK constraints with functions IntoSQL doesn't write

    non créée

    Une contrainte CHECK qui ne peut pas être écrite est omise et signalée.

    Ligne du rapport: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    non créée

    SQL Server n'applique pas ces contraintes CHECK, donc les lignes peuvent les enfreindre.

    Ligne du rapport: check_not_enforced

  • filtered and columnstore indexes

    non créée

    IntoSQL écrit des index b-tree sur des colonnes entières ; recréez les autres après le chargement.

    Ligne du rapport: index_skipped

  • foreign keys

    après les données WITH NOCHECK, puis vérifiée avec un avertissement sur les orphelins

    La clé est créée après les lignes et vérifiée en dernier ; des lignes sans parent la laissent non vérifiée avec un avertissement au lieu d'arrêter le chargement.

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

    NO ACTION

    SQL Server refuse ces cascades, donc un dump n'en contient jamais ; la ligne est là pour les scripts modifiés à la main.

    Ligne du rapport: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    non créée

    Une clé ne peut pas désigner une table absente.

    Ligne du rapport: foreign_key_skipped

  • tables on a partition scheme

    une seule table avec les lignes de chaque partition

    Les lignes sont les mêmes ; partitionnez à nouveau la table dans SQL Server si besoin.

    Ligne du rapport: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    deux tables : les lignes actuelles et l'historique

    La table et sa table d'historique sont copiées comme tables simples ; réactivez SYSTEM_VERSIONING pour les relier.

    Ligne du rapport: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL retiré

    Une colonne dont des valeurs ont dû devenir NULL ne peut pas garder NOT NULL, sinon le chargement s'arrêterait.

    Ligne du rapport: not_null_relaxed

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

    listés dans le rapport

    IntoSQL convertit les tables et leurs lignes ; le reste est listé pour que vous le recréiez à partir du script d'origine.

    Ligne du rapport: not_converted_objects

  • scripts without CREATE TABLE (data only)

    types déduits des valeurs

    Un script de données seules ne contient que des lignes, donc les types viennent des valeurs.

    Ligne du rapport: no_schema

  • expressions in INSERT values

    NULL

    Un convertisseur qui n'exécute pas de base de données ne peut pas les évaluer.

    Ligne du rapport: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    Le texte contient n'importe quelle valeur ; changez le type après le chargement.

    Ligne du rapport: unknown_type

  • NUL characters in text

    conservé

    nvarchar peut contenir un caractère NUL, donc la valeur est copiée telle quelle.

  • text that isn't valid in its encoding

    les octets invalides deviennent le caractère de remplacement

    Le script est en UTF-8 et chaque valeur doit être du texte valide.

    Ligne du rapport: invalid_utf8_replaced

  • text decoded twice (ñ)

    copié tel quel

    Le script contient exactement ces caractères, ils sont donc copiés ; le rapport les signale.

    Ligne du rapport: mojibake_suspected

Dans le fichierDans le scriptLigne du rapport
bitbitLe même type.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(n), nvarchar(n) et nvarchar(max), avec la collation de chaque colonnenvarchar contient tous les caractères, quelle que soit la page de codes d'une colonne varchar. Les collations UTF-8, absentes de SQL Server 2017, deviennent leur jumelle Unicode.
column collationsla même collation sur chaque colonneLes colonnes comparent et trient comme avant, et les clés uniques distinguent les mêmes lignes.
decimal(p,s), money, smallmoneydecimal(p,s) ; money en decimal(19,4)Chaque chiffre est gardé, money avec ses quatre décimales.
datetime, datetime2, smalldatetimedatetime2(p)datetime2 contient chaque valeur datetime et smalldatetime, depuis l'an 1, avec la même précision.
datetimeoffsetdatetimeoffset, avec le décalage de chaque valeurLe même type et les mêmes valeurs.
timetime(p)Le même type.
dates that aren't validNULLUne valeur qui n'est pas une date devient NULL et le rapport la compte.date_out_of_range
json (SQL Server 2025)nvarchar(max)Les mêmes valeurs JSON, que lisent les fonctions JSON de SQL Server.
uniqueidentifieruniqueidentifierLe même type.
binary, varbinary, imagebinary(n), varbinary(n) et varbinary(max)Les octets restent des octets.
xml, sql_variant, hierarchyid, geometry, geographyles mêmes typesLes types propres à SQL Server sont gardés ; les valeurs sql_variant gardent leur texte, donc leur type de base devient nvarchar.
rowversion, timestampbinary(8), sans valeursUne colonne rowversion ne peut pas recevoir les lignes copiées, et SSMS n'écrit aucune valeur pour elle ; ajoutez-la à nouveau après le chargement si besoin.rowversion_empty
IDENTITYIDENTITY, qui reprend après l'identifiant le plus élevéLes identifiants copiés se chargent avec IDENTITY_INSERT, et le compteur reprend après le plus élevé.
CREATE SEQUENCECREATE SEQUENCE avec les mêmes optionsLes séquences SQL Server fonctionnent de la même façon. SSMS n'écrit pas où en est une séquence, elle repart donc de sa valeur de création.
computed columnsles mêmes colonnes calculées, PERSISTED comme dans la sourceLes mêmes formules, calculées par la cible.
computed columns with functions IntoSQL doesn't writeune colonne simpleUne formule qui ne peut pas être écrite laisse une colonne simple et une ligne dans le rapport ; SSMS n'écrit aucune valeur pour les colonnes calculées.generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FORaucune valeur par défautUne valeur par défaut qui ne peut pas être écrite est omise et signalée.default_not_translated
CHECK constraintstraduitesLes mêmes contraintes CHECK, vérifiées au chargement de chaque ligne.
CHECK constraints with functions IntoSQL doesn't writenon crééeUne contrainte CHECK qui ne peut pas être écrite est omise et signalée.check_skipped
CHECK constraints added WITH NOCHECK or disablednon crééeSQL Server n'applique pas ces contraintes CHECK, donc les lignes peuvent les enfreindre.check_not_enforced
filtered and columnstore indexesnon crééeIntoSQL écrit des index b-tree sur des colonnes entières ; recréez les autres après le chargement.index_skipped
foreign keysaprès les données WITH NOCHECK, puis vérifiée avec un avertissement sur les orphelinsLa clé est créée après les lignes et vérifiée en dernier ; des lignes sans parent la laissent non vérifiée avec un avertissement au lieu d'arrêter le chargement.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server refuse ces cascades, donc un dump n'en contient jamais ; la ligne est là pour les scripts modifiés à la main.foreign_key_action_dropped
foreign keys to tables the dump doesn't createnon crééeUne clé ne peut pas désigner une table absente.foreign_key_skipped
tables on a partition schemeune seule table avec les lignes de chaque partitionLes lignes sont les mêmes ; partitionnez à nouveau la table dans SQL Server si besoin.partitions_dropped
temporal tables (SYSTEM_VERSIONING)deux tables : les lignes actuelles et l'historiqueLa table et sa table d'historique sont copiées comme tables simples ; réactivez SYSTEM_VERSIONING pour les relier.system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL retiréUne colonne dont des valeurs ont dû devenir NULL ne peut pas garder NOT NULL, sinon le chargement s'arrêterait.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionslistés dans le rapportIntoSQL convertit les tables et leurs lignes ; le reste est listé pour que vous le recréiez à partir du script d'origine.not_converted_objects
scripts without CREATE TABLE (data only)types déduits des valeursUn script de données seules ne contient que des lignes, donc les types viennent des valeurs.no_schema
expressions in INSERT valuesNULLUn convertisseur qui n'exécute pas de base de données ne peut pas les évaluer.expression_value
types IntoSQL doesn't knownvarchar(max)Le texte contient n'importe quelle valeur ; changez le type après le chargement.unknown_type
NUL characters in textconservénvarchar peut contenir un caractère NUL, donc la valeur est copiée telle quelle.
text that isn't valid in its encodingles octets invalides deviennent le caractère de remplacementLe script est en UTF-8 et chaque valeur doit être du texte valide.invalid_utf8_replaced
text decoded twice (ñ)copié tel quelLe script contient exactement ces caractères, ils sont donc copiés ; le rapport les signale.mojibake_suspected

Charger le script dans SQL Server

Le script crée les tables, copie les lignes, puis ajoute les clés, les index et les clés étrangères ; il se charge donc vite et s'arrête à la première erreur.

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

Les clés étrangères sont ajoutées WITH NOCHECK, puis vérifiées. Si une ligne pointe vers une ligne qui n'existe pas, le script indique quelle contrainte et la laisse non vérifiée, au lieu d'échouer à mi-chemin.

Pour un gros dump, exécutez sqlcmd sur la machine du serveur. Chaque lot de 1000 lignes au plus est validé à part, donc le journal des transactions reste petit.

Faire le dump SQL Server pour un meilleur résultat

Le convertisseur lit ce que contient le dump. Ces options y gardent davantage de vos données :

  • Dans SSMS, faites un clic droit sur la base de données, Tasks, Generate Scripts, et choisissez les tables. dbatools, mssql-scripter et les autres outils construits sur la même bibliothèque écrivent le même script.
  • Sous Advanced, réglez Types of data to script sur Schema and data. Un script du schéma seul contient des tables sans lignes.
  • Enregistrez-le en Unicode, le format par défaut de SSMS, ou en UTF-8 : les deux se lisent de la même façon, et gzip fonctionne aussi.

Ce qui n'est pas converti

Les vues, triggers, procédures, fonctions et autres objets écrits dans le propre langage de SQL Server sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous vérifiiez chacun face à la version de SQL Server cible avant de le recréer.

Questions sur le passage de SQL Server d'une version à l'autre

Pas de réponse ici ? Écrivez-nous depuis la page de contact, une personne vous répond. Page de contact

Mon dump est-il envoyé ?

Non. Le convertisseur s'exécute dans votre navigateur et lit le dump depuis votre disque par morceaux ; il ne quitte donc jamais votre ordinateur. L'application de bureau et la ligne de commande convertissent aussi sur votre ordinateur.

Quelle taille peut avoir le dump ?

Le convertisseur ne garde jamais tout le dump en mémoire : il lit le fichier deux fois, par plages, et écrit le script au fur et à mesure. Les dumps de plusieurs gigaoctets se convertissent dans le navigateur, dans l'application de bureau et avec la ligne de commande.

Lit-il le fichier UTF-16 qu'enregistre SSMS ?

Oui. SSMS enregistre les scripts en UTF-16 par défaut, et le convertisseur lit l'UTF-16 comme l'UTF-8, compressés en gzip ou non, avec GO entre les lots.

De quelles versions de SQL Server le script peut-il venir ?

Les scripts que SSMS, dbatools ou mssql-scripter écrivent depuis SQL Server 2017. Chaque script de test vient de SQL Server 2017, 2022 et 2025 et est comparé à sa source cellule par cellule.

Les valeurs IDENTITY sont-elles gardées ?

Oui. Les colonnes IDENTITY se chargent avec IDENTITY_INSERT, chaque ligne garde son identifiant, et le compteur reprend après le plus élevé. Les séquences sont créées avec les mêmes options.

Que deviennent money, datetimeoffset et les autres types SQL Server ?

Ils restent tels quels, xml, sql_variant, hierarchyid, geometry et geography compris, et chaque colonne de texte garde sa collation. Les valeurs datetimeoffset gardent leur décalage. Les colonnes rowversion sont en binary(8), car le script n'a aucune valeur pour elles.

Et les procédures, les déclencheurs et les vues ?

Ils sont listés par nom dans le rapport et ne sont pas convertis, pour que vous puissiez exécuter leur partie du script d'origine une fois les tables chargées.

Sur quelles versions de SQL Server le script se charge-t-il ?

SQL Server 2017 à 2025, quelle que soit la version qui a écrit le script. Le même script se charge sur chacune, et s'arrête à la première erreur en cas de problème.