---
title: "Passer un script SQL Server à une autre version"
description: "Convertissez un script SSMS de SQL Server 2017 ou plus en un script qui se charge sur SQL Server 2017 à 2025, avec les mêmes tables, clés et données."
canonical: https://intosql.com/fr/sql-server-en-sql-server
last_updated: 2026-10-15
---

# Passer un script SQL Server à une autre version

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.

[Guide de migration de SQL Server vers SQL Server](https://intosql.com/docs/migrations/sql-server-to-sql-server)

[Types de données de SQL Server vers SQL Server](https://intosql.com/docs/types/sql-server-to-sql-server)

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

| Dans le fichier | Dans le script | Ligne du rapport |
| --- | --- | --- |
| bit | bit |  |
| 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 |  |
| column collations | la même collation sur chaque colonne |  |
| decimal(p,s), money, smallmoney | decimal(p,s) ; money en decimal(19,4) |  |
| datetime, datetime2, smalldatetime | datetime2(p) |  |
| datetimeoffset | datetimeoffset, avec le décalage de chaque valeur |  |
| time | time(p) |  |
| dates that aren't valid | NULL | `date_out_of_range` |
| json (SQL Server 2025) | nvarchar(max) |  |
| uniqueidentifier | uniqueidentifier |  |
| binary, varbinary, image | binary(n), varbinary(n) et varbinary(max) |  |
| xml, sql_variant, hierarchyid, geometry, geography | les mêmes types |  |
| rowversion, timestamp | binary(8), sans valeurs | `rowversion_empty` |
| IDENTITY | IDENTITY, qui reprend après l'identifiant le plus élevé |  |
| CREATE SEQUENCE | CREATE SEQUENCE avec les mêmes options |  |
| computed columns | les mêmes colonnes calculées, PERSISTED comme dans la source |  |
| computed columns with functions IntoSQL doesn't write | une colonne simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR | aucune valeur par défaut | `default_not_translated` |
| CHECK constraints | traduites |  |
| CHECK constraints with functions IntoSQL doesn't write | non créée | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | non créée | `check_not_enforced` |
| filtered and columnstore indexes | non créée | `index_skipped` |
| foreign keys | après les données WITH NOCHECK, puis vérifiée avec un avertissement sur les orphelins |  |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTION | `foreign_key_action_dropped` |
| foreign keys to tables the dump doesn't create | non créée | `foreign_key_skipped` |
| tables on a partition scheme | une seule table avec les lignes de chaque partition | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | deux tables : les lignes actuelles et l'historique | `system_versioning_dropped` |
| NOT NULL columns with values that become NULL | NOT NULL retiré | `not_null_relaxed` |
| views, functions, procedures, triggers, synonyms, types and partition functions | listés dans le rapport | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | types déduits des valeurs | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | nvarchar(max) | `unknown_type` |
| NUL characters in text | conservé |  |
| text that isn't valid in its encoding | les octets invalides deviennent le caractère de remplacement | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copié tel quel | `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.

```shell
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

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

## Depuis SQL Server

- [SQL Server vers PostgreSQL](https://intosql.com/fr/sql-server-en-postgresql)
- [SQL Server vers MySQL](https://intosql.com/fr/sql-server-en-mysql)
- [SQL Server vers MariaDB](https://intosql.com/fr/sql-server-en-mariadb)
- [SQL Server vers SQLite](https://intosql.com/fr/sql-server-en-sqlite)
- [SQL Server vers Oracle](https://intosql.com/fr/sql-server-en-oracle)

## Vers SQL Server

- [MySQL vers SQL Server](https://intosql.com/fr/mysql-en-sql-server)
- [MariaDB vers SQL Server](https://intosql.com/fr/mariadb-en-sql-server)
- [PostgreSQL vers SQL Server](https://intosql.com/fr/postgresql-en-sql-server)
- [SQLite vers SQL Server](https://intosql.com/fr/sqlite-en-sql-server)
- [Oracle vers SQL Server](https://intosql.com/fr/oracle-en-sql-server)

## Guide et toutes les paires

- [Guide de migration de SQL Server vers SQL Server](https://intosql.com/docs/migrations/sql-server-to-sql-server)
- [Types de données de SQL Server vers SQL Server](https://intosql.com/docs/types/sql-server-to-sql-server)
- [Toutes les paires de bases de données](https://intosql.com/fr/migration-de-base-de-donnees)
