---
title: "SQL Server-Skript auf eine andere Version bringen"
description: "Konvertiere ein SSMS-Skript aus SQL Server ab 2017 in eines, das auf SQL Server 2017 bis 2025 lädt, mit denselben Tabellen, Schlüsseln und Daten, plus Bericht."
canonical: https://intosql.com/de/sql-server-in-sql-server
last_updated: 2026-10-15
---

# SQL Server-Skript auf eine andere Version bringen

Zieh das Skript, das Generate Scripts in SSMS mit Schema und Daten schreibt, als .sql oder .sql.gz in UTF-16 oder UTF-8 hierher und lade eines herunter, das auf SQL Server 2017 bis 2025 lädt, egal welche Version es geschrieben hat. Identities, Collations und Typen wie xml und hierarchyid bleiben, wie sie sind, und jede Änderung steht im Bericht.

[Leitfaden: SQL Server zu SQL Server migrieren](https://intosql.com/docs/migrations/sql-server-to-sql-server)

[Datentypen von SQL Server zu SQL Server](https://intosql.com/docs/types/sql-server-to-sql-server)

## Was sich zwischen Datei und Skript ändert

Jede Zeile ist eine Regel, die der Konverter anwendet, mit der Berichtszeile, die er schreibt, wenn die Regel etwas an deinen Daten ändert.

| In der Datei | Im Skript | Berichtszeile |
| --- | --- | --- |
| bit | bit |  |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext | nchar(n), nvarchar(n) und nvarchar(max), mit der Kollation jeder Spalte |  |
| column collations | dieselbe Kollation auf jeder Spalte |  |
| decimal(p,s), money, smallmoney | decimal(p,s); money als decimal(19,4) |  |
| datetime, datetime2, smalldatetime | datetime2(p) |  |
| datetimeoffset | datetimeoffset, mit dem Versatz jedes Werts |  |
| 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) und varbinary(max) |  |
| xml, sql_variant, hierarchyid, geometry, geography | dieselben Typen |  |
| rowversion, timestamp | binary(8), leer | `rowversion_empty` |
| IDENTITY | IDENTITY, weiter nach der höchsten ID |  |
| CREATE SEQUENCE | CREATE SEQUENCE mit denselben Optionen |  |
| computed columns | dieselben berechneten Spalten, PERSISTED wie in der Quelle |  |
| computed columns with functions IntoSQL doesn't write | eine normale Spalte | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR | kein Standardwert | `default_not_translated` |
| CHECK constraints | übersetzt |  |
| CHECK constraints with functions IntoSQL doesn't write | nicht angelegt | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | nicht angelegt | `check_not_enforced` |
| filtered and columnstore indexes | nicht angelegt | `index_skipped` |
| foreign keys | nach den Daten, WITH NOCHECK, dann geprüft, mit einer Warnung bei verwaisten Zeilen |  |
| 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 | nicht angelegt | `foreign_key_skipped` |
| tables on a partition scheme | eine Tabelle mit den Zeilen aller Partitionen | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | zwei Tabellen: die aktuellen Zeilen und die Historie | `system_versioning_dropped` |
| NOT NULL columns with values that become NULL | NOT NULL entfernt | `not_null_relaxed` |
| views, functions, procedures, triggers, synonyms, types and partition functions | im Bericht aufgeführt | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | Typen aus den Werten gelesen | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | nvarchar(max) | `unknown_type` |
| NUL characters in text | erhalten |  |
| text that isn't valid in its encoding | die fehlerhaften Bytes als Ersatzzeichen | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | unverändert kopiert | `mojibake_suspected` |

## Das Skript in SQL Server laden

Das Skript legt die Tabellen an, kopiert die Zeilen und fügt dann Schlüssel, Indizes und Fremdschlüssel hinzu, so lädt es schnell und hält beim ersten Fehler an.

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

Fremdschlüssel werden mit WITH NOCHECK hinzugefügt und dann geprüft. Verweist eine Zeile auf eine nicht vorhandene Zeile, nennt das Skript den Fremdschlüssel und lässt ihn ungeprüft, statt auf halbem Weg abzubrechen.

Führe bei einem großen Dump sqlcmd auf dem Rechner des Servers aus. Jeder Stapel von bis zu 1000 Zeilen wird einzeln festgeschrieben, so bleibt das Transaktionsprotokoll klein.

## Den SQL Server-Dump für das beste Ergebnis erstellen

Der Konverter liest, was der Dump enthält. Mit diesen Optionen bleibt mehr von deinen Daten darin:

- Klicke in SSMS mit der rechten Maustaste auf die Datenbank, dann auf Tasks, Generate Scripts, und wähle die Tabellen. dbatools, mssql-scripter und andere Werkzeuge auf Basis derselben Bibliothek schreiben dasselbe Skript.
- Setze unter Advanced die Option Types of data to script auf Schema and data. Ein Skript nur mit dem Schema hat Tabellen ohne Zeilen.
- Speichere es als Unicode, den Standard von SSMS, oder als UTF-8: Beides wird gleich gelesen, und gzip funktioniert auch.

## Was nicht konvertiert wird

Views, Trigger, Prozeduren, Funktionen und andere Objekte in der eigenen Sprache von SQL Server stehen mit Namen im Bericht und werden nie stillschweigend entfernt, damit du jedes vor dem Neuanlegen mit der SQL Server-Version abgleichen kannst, in die du lädst.

## Fragen zum Wechsel von SQL Server zwischen Versionen

### Wird mein Dump hochgeladen?

Nein. Der Konverter läuft in deinem Browser und liest den Dump stückweise von deiner Festplatte, daher verlässt er nie deinen Computer. Die Desktop-App und die Kommandozeile konvertieren ebenfalls auf deinem Computer.

### Wie groß darf der Dump sein?

Der Konverter hält nie den ganzen Dump im Speicher: Er liest die Datei zweimal, in Abschnitten, und schreibt das Skript fortlaufend. Dumps von mehreren Gigabyte werden im Browser, in der Desktop-App und mit der Kommandozeile konvertiert.

### Liest es die UTF-16-Datei, die SSMS speichert?

Ja. SSMS speichert Skripte standardmäßig als UTF-16, und der Konverter liest UTF-16 und UTF-8 gleichermaßen, gezippt oder nicht, mit GO zwischen den Batches.

### Aus welchen SQL Server-Versionen kann das Skript stammen?

Skripte, die SSMS, dbatools oder mssql-scripter ab SQL Server 2017 schreiben. Jedes Test-Skript stammt aus SQL Server 2017, 2022 und 2025 und wird Zelle für Zelle mit seiner Quelle verglichen.

### Bleiben IDENTITY-Werte erhalten?

Ja. IDENTITY-Spalten laden mit IDENTITY_INSERT, jede Zeile behält ihre ID, und der Zähler macht nach der höchsten weiter. Sequenzen werden mit denselben Optionen angelegt.

### Was passiert mit money, datetimeoffset und anderen SQL Server-Typen?

Sie bleiben, wie sie sind, einschließlich xml, sql_variant, hierarchyid, geometry und geography, und jede Textspalte behält ihre Kollation. datetimeoffset-Werte behalten ihren Versatz. rowversion-Spalten werden binary(8), weil das Skript keine Werte für sie enthält.

### Was ist mit Prozeduren, Triggern und Sichten?

Sie stehen mit Namen im Bericht und werden nicht konvertiert, damit du ihren Teil des ursprünglichen Skripts ausführen kannst, sobald die Tabellen da sind.

### Auf welchen SQL Server-Versionen lädt das Skript?

SQL Server 2017 bis 2025, egal welche Version das Skript geschrieben hat. Dasselbe Skript lädt auf jeder Version und hält beim ersten Fehler an, falls etwas schiefgeht.

## Aus SQL Server

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

## Nach SQL Server

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

## Leitfaden und alle Paare

- [Leitfaden: SQL Server zu SQL Server migrieren](https://intosql.com/docs/migrations/sql-server-to-sql-server)
- [Datentypen von SQL Server zu SQL Server](https://intosql.com/docs/types/sql-server-to-sql-server)
- [Alle Datenbankpaare](https://intosql.com/de/datenbankmigration)
