Naar de inhoud
IntoSQL-startpagina

Een SQL Server-script verhuizen naar een oudere of nieuwere SQL Server

Sleep het script dat Generate Scripts van SSMS schrijft met schema en data, als .sql of .sql.gz, in UTF-16 of UTF-8, hierheen en download er een dat laadt op SQL Server 2017 tot en met 2025, welke versie het ook schreef. Identities, collaties en typen zoals xml en hierarchyid blijven zoals ze zijn, en elke wijziging staat in het rapport.

Je bestand
sqlshop_2024_sqlserver.sqlVoorbeeldbestand, 11 kB
Je database

18 rijen geconverteerd, 1 correctie, geen afgewezen

Tonen

Tabellen in shop_2024_sqlserver.sqlSQL Server-dump · geschreven door SQL Server Management Objects · utf-8

  • orders10 rijen
    11 kolommen
    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 rijen1
    8 kolommen
    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)

Niet geconverteerd

  • Weergave paid_orders
  • Trigger orders_no_negative

Elke database schrijft deze in een eigen taal. Herschrijf ze voor 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

Correcties

  1. "row_version" van customers is een rijversie die SQL Server zelf instelt; de dump heeft er geen waarden voor, dus het is binary(8) en leeg.

Na te kijken

  • 2 weergaven, triggers, routines of gebeurtenissen zijn niet geconverteerd; het rapport noemt ze allemaal. Maak ze met de hand opnieuw aan in SQL Server.
  • De check check1 op orders kan niet voor SQL Server worden geschreven (function isjson), dus hij wordt niet aangemaakt. Schrijf de check met de hand als hij ertoe doet.
  • De index idx_orders_pending op orders gebruikt een expressie die niet voor SQL Server kan worden geschreven (an index on an expression), dus hij wordt niet aangemaakt. Maak de index met de hand aan als query's hem nodig hebben.

Je bestand wordt op deze computer omgezet en nooit geüpload.

Andere voorbeelden:

Wat er verandert tussen het bestand en het script

Elke rij is een regel die de converter toepast, met de rapportregel die hij schrijft als de regel iets in je data verandert.

  • bit

    bit

    Hetzelfde type.

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

    nchar(n), nvarchar(n) en nvarchar(max), met de collation van elke kolom

    nvarchar bevat elk teken, welke codepagina een varchar-kolom ook had. UTF-8-collations, die SQL Server 2017 mist, worden hun Unicode-tegenhanger.

  • column collations

    dezelfde collation op elke kolom

    Kolommen vergelijken en sorteren zoals voorheen, en unieke sleutels houden dezelfde rijen uit elkaar.

  • decimal(p,s), money, smallmoney

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

    Elk cijfer blijft behouden, money met zijn vier decimalen.

  • datetime, datetime2, smalldatetime

    datetime2(p)

    datetime2 bevat elke datetime- en smalldatetime-waarde, vanaf het jaar 1, met dezelfde precisie.

  • datetimeoffset

    datetimeoffset, met de offset van elke waarde

    Hetzelfde type en dezelfde waarden.

  • time

    time(p)

    Hetzelfde type.

  • dates that aren't valid

    NULL

    Een waarde die geen datum is, wordt NULL en het rapport telt hem.

    Rapportregel: date_out_of_range

  • json (SQL Server 2025)

    nvarchar(max)

    Dezelfde JSON-waarden, die de JSON-functies van SQL Server lezen.

  • uniqueidentifier

    uniqueidentifier

    Hetzelfde type.

  • binary, varbinary, image

    binary(n), varbinary(n) en varbinary(max)

    Bytes blijven bytes.

  • xml, sql_variant, hierarchyid, geometry, geography

    dezelfde typen

    De eigen typen van SQL Server blijven behouden; sql_variant-waarden behouden hun tekst, dus hun basistype wordt nvarchar.

  • rowversion, timestamp

    binary(8), leeg

    Een rowversion-kolom kan de gekopieerde rijen niet opnemen en SSMS neemt er geen waarden voor op in het script; voeg hem na het laden opnieuw toe als je er een nodig hebt.

    Rapportregel: rowversion_empty

  • IDENTITY

    IDENTITY, verdergaand na het hoogste id

    De gekopieerde id's laden met IDENTITY_INSERT, en de teller gaat verder na het hoogste.

  • CREATE SEQUENCE

    CREATE SEQUENCE met dezelfde opties

    Sequences in SQL Server werken op dezelfde manier. SSMS legt niet vast hoe ver een sequence is gekomen, dus hij begint waar hij is aangemaakt.

  • computed columns

    dezelfde berekende kolommen, PERSISTED zoals in de bron

    Dezelfde formules, berekend door het doel.

  • computed columns with functions IntoSQL doesn't write

    een gewone kolom

    Een formule die niet kan worden geschreven, levert een gewone kolom en een regel in het rapport op; SSMS neemt geen waarden voor berekende kolommen op in het script.

    Rapportregel: generated_not_translated

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

    geen standaardwaarde

    Een standaardwaarde die niet kan worden geschreven, wordt weggelaten en gemeld.

    Rapportregel: default_not_translated

  • CHECK constraints

    vertaald

    Dezelfde checks, getest terwijl elke rij laadt.

  • CHECK constraints with functions IntoSQL doesn't write

    niet aangemaakt

    Een check die niet kan worden geschreven, wordt weggelaten en gemeld.

    Rapportregel: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    niet aangemaakt

    SQL Server past deze checks niet toe, dus de rijen kunnen ze schenden.

    Rapportregel: check_not_enforced

  • filtered and columnstore indexes

    niet aangemaakt

    IntoSQL schrijft b-tree-indexen op hele kolommen; maak de andere na het laden opnieuw aan.

    Rapportregel: index_skipped

  • foreign keys

    na de data WITH NOCHECK, daarna gecontroleerd met een waarschuwing bij wezen

    De sleutel wordt na de rijen aangemaakt en als laatste gecontroleerd; rijen zonder ouder laten hem ongecontroleerd met een waarschuwing, in plaats van het laden te stoppen.

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

    NO ACTION

    SQL Server weigert die cascades, dus een dump bevat er nooit een; deze regel is er voor met de hand bewerkte scripts.

    Rapportregel: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    niet aangemaakt

    Een sleutel kan niet verwijzen naar een tabel die er niet is.

    Rapportregel: foreign_key_skipped

  • tables on a partition scheme

    één tabel met de rijen van elke partitie

    De rijen zijn dezelfde; partitioneer de tabel opnieuw in SQL Server als dat nodig is.

    Rapportregel: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    twee tabellen: de huidige rijen en de geschiedenis

    De tabel en zijn geschiedenistabel worden als gewone tabellen gekopieerd; zet SYSTEM_VERSIONING weer aan om ze te koppelen.

    Rapportregel: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL weggelaten

    Een kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.

    Rapportregel: not_null_relaxed

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

    vermeld in het rapport

    IntoSQL converteert tabellen en hun rijen; de rest wordt vermeld zodat je het opnieuw kunt maken vanuit het oorspronkelijke script.

    Rapportregel: not_converted_objects

  • scripts without CREATE TABLE (data only)

    typen afgeleid uit de waarden

    Een script met alleen data bevat alleen rijen, dus de typen komen uit de waarden.

    Rapportregel: no_schema

  • expressions in INSERT values

    NULL

    Een converter die geen database draait, kan ze niet evalueren.

    Rapportregel: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    Tekst kan elke waarde bevatten; wijzig het type na het laden.

    Rapportregel: unknown_type

  • NUL characters in text

    behouden

    nvarchar kan een NUL-teken bevatten, dus de waarde wordt ongewijzigd gekopieerd.

  • text that isn't valid in its encoding

    de foute bytes als het vervangingsteken

    Het script is UTF-8 en elke waarde moet geldige tekst zijn.

    Rapportregel: invalid_utf8_replaced

  • text decoded twice (ñ)

    ongewijzigd gekopieerd

    Het script bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.

    Rapportregel: mojibake_suspected

In het bestandIn het scriptRapportregel
bitbitHetzelfde type.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(n), nvarchar(n) en nvarchar(max), met de collation van elke kolomnvarchar bevat elk teken, welke codepagina een varchar-kolom ook had. UTF-8-collations, die SQL Server 2017 mist, worden hun Unicode-tegenhanger.
column collationsdezelfde collation op elke kolomKolommen vergelijken en sorteren zoals voorheen, en unieke sleutels houden dezelfde rijen uit elkaar.
decimal(p,s), money, smallmoneydecimal(p,s); money als decimal(19,4)Elk cijfer blijft behouden, money met zijn vier decimalen.
datetime, datetime2, smalldatetimedatetime2(p)datetime2 bevat elke datetime- en smalldatetime-waarde, vanaf het jaar 1, met dezelfde precisie.
datetimeoffsetdatetimeoffset, met de offset van elke waardeHetzelfde type en dezelfde waarden.
timetime(p)Hetzelfde type.
dates that aren't validNULLEen waarde die geen datum is, wordt NULL en het rapport telt hem.date_out_of_range
json (SQL Server 2025)nvarchar(max)Dezelfde JSON-waarden, die de JSON-functies van SQL Server lezen.
uniqueidentifieruniqueidentifierHetzelfde type.
binary, varbinary, imagebinary(n), varbinary(n) en varbinary(max)Bytes blijven bytes.
xml, sql_variant, hierarchyid, geometry, geographydezelfde typenDe eigen typen van SQL Server blijven behouden; sql_variant-waarden behouden hun tekst, dus hun basistype wordt nvarchar.
rowversion, timestampbinary(8), leegEen rowversion-kolom kan de gekopieerde rijen niet opnemen en SSMS neemt er geen waarden voor op in het script; voeg hem na het laden opnieuw toe als je er een nodig hebt.rowversion_empty
IDENTITYIDENTITY, verdergaand na het hoogste idDe gekopieerde id's laden met IDENTITY_INSERT, en de teller gaat verder na het hoogste.
CREATE SEQUENCECREATE SEQUENCE met dezelfde optiesSequences in SQL Server werken op dezelfde manier. SSMS legt niet vast hoe ver een sequence is gekomen, dus hij begint waar hij is aangemaakt.
computed columnsdezelfde berekende kolommen, PERSISTED zoals in de bronDezelfde formules, berekend door het doel.
computed columns with functions IntoSQL doesn't writeeen gewone kolomEen formule die niet kan worden geschreven, levert een gewone kolom en een regel in het rapport op; SSMS neemt geen waarden voor berekende kolommen op in het script.generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FORgeen standaardwaardeEen standaardwaarde die niet kan worden geschreven, wordt weggelaten en gemeld.default_not_translated
CHECK constraintsvertaaldDezelfde checks, getest terwijl elke rij laadt.
CHECK constraints with functions IntoSQL doesn't writeniet aangemaaktEen check die niet kan worden geschreven, wordt weggelaten en gemeld.check_skipped
CHECK constraints added WITH NOCHECK or disabledniet aangemaaktSQL Server past deze checks niet toe, dus de rijen kunnen ze schenden.check_not_enforced
filtered and columnstore indexesniet aangemaaktIntoSQL schrijft b-tree-indexen op hele kolommen; maak de andere na het laden opnieuw aan.index_skipped
foreign keysna de data WITH NOCHECK, daarna gecontroleerd met een waarschuwing bij wezenDe sleutel wordt na de rijen aangemaakt en als laatste gecontroleerd; rijen zonder ouder laten hem ongecontroleerd met een waarschuwing, in plaats van het laden te stoppen.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server weigert die cascades, dus een dump bevat er nooit een; deze regel is er voor met de hand bewerkte scripts.foreign_key_action_dropped
foreign keys to tables the dump doesn't createniet aangemaaktEen sleutel kan niet verwijzen naar een tabel die er niet is.foreign_key_skipped
tables on a partition schemeéén tabel met de rijen van elke partitieDe rijen zijn dezelfde; partitioneer de tabel opnieuw in SQL Server als dat nodig is.partitions_dropped
temporal tables (SYSTEM_VERSIONING)twee tabellen: de huidige rijen en de geschiedenisDe tabel en zijn geschiedenistabel worden als gewone tabellen gekopieerd; zet SYSTEM_VERSIONING weer aan om ze te koppelen.system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL weggelatenEen kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsvermeld in het rapportIntoSQL converteert tabellen en hun rijen; de rest wordt vermeld zodat je het opnieuw kunt maken vanuit het oorspronkelijke script.not_converted_objects
scripts without CREATE TABLE (data only)typen afgeleid uit de waardenEen script met alleen data bevat alleen rijen, dus de typen komen uit de waarden.no_schema
expressions in INSERT valuesNULLEen converter die geen database draait, kan ze niet evalueren.expression_value
types IntoSQL doesn't knownvarchar(max)Tekst kan elke waarde bevatten; wijzig het type na het laden.unknown_type
NUL characters in textbehoudennvarchar kan een NUL-teken bevatten, dus de waarde wordt ongewijzigd gekopieerd.
text that isn't valid in its encodingde foute bytes als het vervangingstekenHet script is UTF-8 en elke waarde moet geldige tekst zijn.invalid_utf8_replaced
text decoded twice (ñ)ongewijzigd gekopieerdHet script bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.mojibake_suspected

Het script in SQL Server laden

Het script maakt de tabellen aan, kopieert de rijen en voegt daarna sleutels, indexen en refererende sleutels toe, zodat het snel laadt en bij de eerste fout stopt.

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

Refererende sleutels worden toegevoegd met WITH NOCHECK en daarna gecontroleerd. Verwijst een rij naar een rij die niet bestaat, dan vertelt het script welke constraint het is en laat het die ongecontroleerd, in plaats van halverwege te mislukken.

Voer bij een grote dump sqlcmd uit op dezelfde machine als de server. Elke batch van maximaal 1000 rijen wordt apart gecommit, zodat het transactielogboek klein blijft.

Een dump van SQL Server maken voor het beste resultaat

De converter leest wat de dump bevat. Met deze opties blijft er meer van je data in staan:

  • Klik in SSMS met rechts op de database, kies Tasks, Generate Scripts en selecteer de tabellen. dbatools, mssql-scripter en andere tools op basis van dezelfde bibliotheek schrijven hetzelfde script.
  • Zet onder Advanced Types of data to script op Schema and data. Een script van alleen het schema bevat tabellen zonder rijen.
  • Sla het op als Unicode, de standaard van SSMS, of als UTF-8: beide worden op dezelfde manier gelezen, en gzip werkt ook.

Wat niet wordt geconverteerd

Weergaven, triggers, procedures, functies en andere objecten in de eigen taal van SQL Server staan op naam in het rapport en worden nooit stilletjes weggelaten, zodat je elk ervan kunt controleren tegen de SQL Server-versie waarin je laadt voordat je het opnieuw aanmaakt.

Vragen over SQL Server verhuizen tussen versies

Staat je vraag er niet bij? Schrijf ons via de contactpagina en een mens antwoordt. Contactpagina

Wordt mijn dump geüpload?

Nee. De converter draait in je browser en leest de dump in delen van je schijf, dus hij verlaat je computer nooit. De desktopapp en de opdrachtregel converteren ook op je computer.

Hoe groot mag de dump zijn?

De converter houdt nooit de hele dump in het geheugen: hij leest het bestand twee keer, in bereiken, en schrijft het script gaandeweg. Dumps van meerdere gigabytes worden geconverteerd in de browser, in de desktopapp en met de opdrachtregel.

Leest het het UTF-16-bestand dat SSMS opslaat?

Ja. SSMS slaat scripts standaard op als UTF-16, en de converter leest UTF-16 en UTF-8 even goed, met of zonder gzip, met GO tussen batches.

Van welke SQL Server-versies kan het script komen?

Scripts die SSMS, dbatools of mssql-scripter schrijven vanaf SQL Server 2017. Elk testscript komt van SQL Server 2017, 2022 en 2025 en wordt cel voor cel met zijn bron vergeleken.

Blijven IDENTITY-waarden behouden?

Ja. IDENTITY-kolommen laden met IDENTITY_INSERT, elke rij behoudt zijn id en de teller gaat verder na het hoogste. Sequences worden aangemaakt met dezelfde opties.

Wat gebeurt er met money, datetimeoffset en andere SQL Server-typen?

Ze blijven zoals ze zijn, xml, sql_variant, hierarchyid, geometry en geography inbegrepen, en elke tekstkolom behoudt zijn collation. datetimeoffset-waarden behouden hun offsets. rowversion-kolommen worden binary(8), omdat het script er geen waarden voor heeft.

En procedures, triggers en weergaven?

Ze staan op naam in het rapport en worden niet geconverteerd, zodat je hun deel van het oorspronkelijke script kunt uitvoeren zodra de tabellen er zijn.

Op welke SQL Server-versies laadt het script?

SQL Server 2017 tot en met 2025, welke versie het script ook schreef. Hetzelfde script laadt op elk ervan en stopt bij de eerste fout als er iets misgaat.