Zum Inhalt springen
IntoSQL-Startseite

Ein SQL Server-Skript auf ein älteres oder neueres SQL Server 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.

Deine Datei
sqlshop_2024_sqlserver.sqlBeispieldatei, 11 kB
Deine Datenbank

18 Zeilen konvertiert, 1 Korrektur, keine abgelehnt

Anzeigen

Tabellen in shop_2024_sqlserver.sqlSQL Server-Dump · erstellt mit SQL Server Management Objects · utf-8

  • orders10 Zeilen
    11 Spalten
    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 Zeilen1
    8 Spalten
    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)

Nicht konvertiert

  • Sicht paid_orders
  • Trigger orders_no_negative

Jede Datenbank schreibt diese in ihrer eigenen Sprache. Schreib sie für SQL Server neu.

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

Korrekturen

  1. "row_version" von customers ist eine Zeilenversion, die SQL Server selbst setzt; der Dump hat keine Werte dafür, daher ist es binary(8) und leer.

Zu prüfen

  • 2 Sichten, Trigger, Routinen oder Ereignisse werden nicht konvertiert; der Bericht listet sie einzeln auf. Lege sie in SQL Server von Hand neu an.
  • Die CHECK-Bedingung check1 auf orders lässt sich nicht für SQL Server schreiben (function isjson), daher wird sie nicht angelegt. Schreib die CHECK-Bedingung von Hand, wenn sie wichtig ist.
  • Der Index idx_orders_pending auf orders nutzt einen Ausdruck, der sich nicht für SQL Server schreiben lässt (an index on an expression), daher wird er nicht angelegt. Lege den Index von Hand an, wenn Abfragen ihn brauchen.

Deine Datei wird auf diesem Computer umgewandelt und nie hochgeladen.

Weitere Beispiele:

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.

  • bit

    bit

    Derselbe Typ.

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

    nchar(n), nvarchar(n) und nvarchar(max), mit der Kollation jeder Spalte

    nvarchar fasst jedes Zeichen, egal welche Codepage eine varchar-Spalte hatte. UTF-8-Kollationen, die SQL Server 2017 fehlen, werden zu ihrem Unicode-Gegenstück.

  • column collations

    dieselbe Kollation auf jeder Spalte

    Spalten vergleichen und sortieren wie zuvor, und eindeutige Schlüssel halten dieselben Zeilen auseinander.

  • decimal(p,s), money, smallmoney

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

    Jede Stelle bleibt erhalten, money mit seinen vier Nachkommastellen.

  • datetime, datetime2, smalldatetime

    datetime2(p)

    datetime2 fasst jeden datetime- und smalldatetime-Wert ab dem Jahr 1, mit derselben Genauigkeit.

  • datetimeoffset

    datetimeoffset, mit dem Versatz jedes Werts

    Derselbe Typ und dieselben Werte.

  • time

    time(p)

    Derselbe Typ.

  • dates that aren't valid

    NULL

    Ein Wert, der kein Datum ist, wird NULL, und der Bericht zählt ihn.

    Berichtszeile: date_out_of_range

  • json (SQL Server 2025)

    nvarchar(max)

    Dieselben JSON-Werte, die die JSON-Funktionen von SQL Server lesen.

  • uniqueidentifier

    uniqueidentifier

    Derselbe Typ.

  • binary, varbinary, image

    binary(n), varbinary(n) und varbinary(max)

    Bytes bleiben Bytes.

  • xml, sql_variant, hierarchyid, geometry, geography

    dieselben Typen

    Die eigenen Typen von SQL Server bleiben erhalten; sql_variant-Werte behalten ihren Text, daher wird ihr Basistyp nvarchar.

  • rowversion, timestamp

    binary(8), leer

    Eine rowversion-Spalte kann die kopierten Zeilen nicht aufnehmen, und SSMS schreibt keine Werte dafür; füge sie nach dem Laden neu hinzu, falls du eine brauchst.

    Berichtszeile: rowversion_empty

  • IDENTITY

    IDENTITY, weiter nach der höchsten ID

    Die kopierten IDs laden mit IDENTITY_INSERT, und der Zähler macht nach der höchsten weiter.

  • CREATE SEQUENCE

    CREATE SEQUENCE mit denselben Optionen

    Sequenzen in SQL Server funktionieren genauso. SSMS schreibt nicht, wie weit eine Sequenz gekommen ist, daher beginnt sie dort, wo sie angelegt wurde.

  • computed columns

    dieselben berechneten Spalten, PERSISTED wie in der Quelle

    Dieselben Formeln, berechnet vom Ziel.

  • computed columns with functions IntoSQL doesn't write

    eine normale Spalte

    Eine Formel, die sich nicht schreiben lässt, hinterlässt eine normale Spalte und eine Zeile im Bericht; SSMS schreibt keine Werte für berechnete Spalten.

    Berichtszeile: generated_not_translated

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

    kein Standardwert

    Ein Standardwert, der sich nicht schreiben lässt, wird weggelassen und gemeldet.

    Berichtszeile: default_not_translated

  • CHECK constraints

    übersetzt

    Dieselben CHECK-Bedingungen, geprüft beim Laden jeder Zeile.

  • CHECK constraints with functions IntoSQL doesn't write

    nicht angelegt

    Eine CHECK-Bedingung, die sich nicht schreiben lässt, wird weggelassen und gemeldet.

    Berichtszeile: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    nicht angelegt

    SQL Server wendet diese CHECK-Bedingungen nicht an, daher können die Zeilen sie verletzen.

    Berichtszeile: check_not_enforced

  • filtered and columnstore indexes

    nicht angelegt

    IntoSQL schreibt B-Tree-Indizes auf ganze Spalten; lege die anderen nach dem Laden neu an.

    Berichtszeile: index_skipped

  • foreign keys

    nach den Daten, WITH NOCHECK, dann geprüft, mit einer Warnung bei verwaisten Zeilen

    Der Schlüssel wird nach den Zeilen angelegt und zuletzt geprüft; Zeilen ohne Elternzeile lassen ihn mit einer Warnung ungeprüft, statt das Laden abzubrechen.

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

    NO ACTION

    SQL Server lehnt diese Kaskaden ab, daher enthält ein Dump nie eine; die Zeile ist für von Hand bearbeitete Skripte da.

    Berichtszeile: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    nicht angelegt

    Ein Schlüssel kann nicht auf eine Tabelle verweisen, die es nicht gibt.

    Berichtszeile: foreign_key_skipped

  • tables on a partition scheme

    eine Tabelle mit den Zeilen aller Partitionen

    Die Zeilen sind dieselben; partitioniere die Tabelle in SQL Server neu, wenn nötig.

    Berichtszeile: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    zwei Tabellen: die aktuellen Zeilen und die Historie

    Die Tabelle und ihre Historientabelle werden als normale Tabellen kopiert; schalte SYSTEM_VERSIONING wieder ein, um sie zu verknüpfen.

    Berichtszeile: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL entfernt

    Eine Spalte, deren Werte NULL werden mussten, kann NOT NULL nicht behalten, sonst würde das Laden abbrechen.

    Berichtszeile: not_null_relaxed

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

    im Bericht aufgeführt

    IntoSQL konvertiert Tabellen und ihre Zeilen; der Rest wird aufgeführt, damit du ihn aus dem ursprünglichen Skript neu anlegst.

    Berichtszeile: not_converted_objects

  • scripts without CREATE TABLE (data only)

    Typen aus den Werten gelesen

    Ein Skript nur mit Daten enthält nur Zeilen, daher kommen die Typen aus den Werten.

    Berichtszeile: no_schema

  • expressions in INSERT values

    NULL

    Ein Konverter, der keine Datenbank ausführt, kann sie nicht auswerten.

    Berichtszeile: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    Text nimmt jeden Wert auf; ändere den Typ nach dem Laden.

    Berichtszeile: unknown_type

  • NUL characters in text

    erhalten

    nvarchar kann ein NUL-Zeichen enthalten, daher wird der Wert unverändert kopiert.

  • text that isn't valid in its encoding

    die fehlerhaften Bytes als Ersatzzeichen

    Das Skript ist UTF-8, und jeder Wert muss gültiger Text sein.

    Berichtszeile: invalid_utf8_replaced

  • text decoded twice (ñ)

    unverändert kopiert

    Das Skript enthält genau diese Zeichen, daher werden sie kopiert; der Bericht weist auf sie hin.

    Berichtszeile: mojibake_suspected

In der DateiIm SkriptBerichtszeile
bitbitDerselbe Typ.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(n), nvarchar(n) und nvarchar(max), mit der Kollation jeder Spaltenvarchar fasst jedes Zeichen, egal welche Codepage eine varchar-Spalte hatte. UTF-8-Kollationen, die SQL Server 2017 fehlen, werden zu ihrem Unicode-Gegenstück.
column collationsdieselbe Kollation auf jeder SpalteSpalten vergleichen und sortieren wie zuvor, und eindeutige Schlüssel halten dieselben Zeilen auseinander.
decimal(p,s), money, smallmoneydecimal(p,s); money als decimal(19,4)Jede Stelle bleibt erhalten, money mit seinen vier Nachkommastellen.
datetime, datetime2, smalldatetimedatetime2(p)datetime2 fasst jeden datetime- und smalldatetime-Wert ab dem Jahr 1, mit derselben Genauigkeit.
datetimeoffsetdatetimeoffset, mit dem Versatz jedes WertsDerselbe Typ und dieselben Werte.
timetime(p)Derselbe Typ.
dates that aren't validNULLEin Wert, der kein Datum ist, wird NULL, und der Bericht zählt ihn.date_out_of_range
json (SQL Server 2025)nvarchar(max)Dieselben JSON-Werte, die die JSON-Funktionen von SQL Server lesen.
uniqueidentifieruniqueidentifierDerselbe Typ.
binary, varbinary, imagebinary(n), varbinary(n) und varbinary(max)Bytes bleiben Bytes.
xml, sql_variant, hierarchyid, geometry, geographydieselben TypenDie eigenen Typen von SQL Server bleiben erhalten; sql_variant-Werte behalten ihren Text, daher wird ihr Basistyp nvarchar.
rowversion, timestampbinary(8), leerEine rowversion-Spalte kann die kopierten Zeilen nicht aufnehmen, und SSMS schreibt keine Werte dafür; füge sie nach dem Laden neu hinzu, falls du eine brauchst.rowversion_empty
IDENTITYIDENTITY, weiter nach der höchsten IDDie kopierten IDs laden mit IDENTITY_INSERT, und der Zähler macht nach der höchsten weiter.
CREATE SEQUENCECREATE SEQUENCE mit denselben OptionenSequenzen in SQL Server funktionieren genauso. SSMS schreibt nicht, wie weit eine Sequenz gekommen ist, daher beginnt sie dort, wo sie angelegt wurde.
computed columnsdieselben berechneten Spalten, PERSISTED wie in der QuelleDieselben Formeln, berechnet vom Ziel.
computed columns with functions IntoSQL doesn't writeeine normale SpalteEine Formel, die sich nicht schreiben lässt, hinterlässt eine normale Spalte und eine Zeile im Bericht; SSMS schreibt keine Werte für berechnete Spalten.generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FORkein StandardwertEin Standardwert, der sich nicht schreiben lässt, wird weggelassen und gemeldet.default_not_translated
CHECK constraintsübersetztDieselben CHECK-Bedingungen, geprüft beim Laden jeder Zeile.
CHECK constraints with functions IntoSQL doesn't writenicht angelegtEine CHECK-Bedingung, die sich nicht schreiben lässt, wird weggelassen und gemeldet.check_skipped
CHECK constraints added WITH NOCHECK or disablednicht angelegtSQL Server wendet diese CHECK-Bedingungen nicht an, daher können die Zeilen sie verletzen.check_not_enforced
filtered and columnstore indexesnicht angelegtIntoSQL schreibt B-Tree-Indizes auf ganze Spalten; lege die anderen nach dem Laden neu an.index_skipped
foreign keysnach den Daten, WITH NOCHECK, dann geprüft, mit einer Warnung bei verwaisten ZeilenDer Schlüssel wird nach den Zeilen angelegt und zuletzt geprüft; Zeilen ohne Elternzeile lassen ihn mit einer Warnung ungeprüft, statt das Laden abzubrechen.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server lehnt diese Kaskaden ab, daher enthält ein Dump nie eine; die Zeile ist für von Hand bearbeitete Skripte da.foreign_key_action_dropped
foreign keys to tables the dump doesn't createnicht angelegtEin Schlüssel kann nicht auf eine Tabelle verweisen, die es nicht gibt.foreign_key_skipped
tables on a partition schemeeine Tabelle mit den Zeilen aller PartitionenDie Zeilen sind dieselben; partitioniere die Tabelle in SQL Server neu, wenn nötig.partitions_dropped
temporal tables (SYSTEM_VERSIONING)zwei Tabellen: die aktuellen Zeilen und die HistorieDie Tabelle und ihre Historientabelle werden als normale Tabellen kopiert; schalte SYSTEM_VERSIONING wieder ein, um sie zu verknüpfen.system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL entferntEine Spalte, deren Werte NULL werden mussten, kann NOT NULL nicht behalten, sonst würde das Laden abbrechen.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsim Bericht aufgeführtIntoSQL konvertiert Tabellen und ihre Zeilen; der Rest wird aufgeführt, damit du ihn aus dem ursprünglichen Skript neu anlegst.not_converted_objects
scripts without CREATE TABLE (data only)Typen aus den Werten gelesenEin Skript nur mit Daten enthält nur Zeilen, daher kommen die Typen aus den Werten.no_schema
expressions in INSERT valuesNULLEin Konverter, der keine Datenbank ausführt, kann sie nicht auswerten.expression_value
types IntoSQL doesn't knownvarchar(max)Text nimmt jeden Wert auf; ändere den Typ nach dem Laden.unknown_type
NUL characters in texterhaltennvarchar kann ein NUL-Zeichen enthalten, daher wird der Wert unverändert kopiert.
text that isn't valid in its encodingdie fehlerhaften Bytes als ErsatzzeichenDas Skript ist UTF-8, und jeder Wert muss gültiger Text sein.invalid_utf8_replaced
text decoded twice (ñ)unverändert kopiertDas Skript enthält genau diese Zeichen, daher werden sie kopiert; der Bericht weist auf sie hin.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.

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

Keine Antwort gefunden? Schreib uns über die Kontaktseite, und ein Mensch antwortet. Kontaktseite

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.