Vai al contenuto
Home di IntoSQL

Porta uno script SQL Server su un SQL Server più vecchio o più recente

Trascina lo script che scrive Generate Scripts di SSMS con schema e dati, come .sql o .sql.gz, in UTF-16 o UTF-8, e scaricane uno che si carica su SQL Server da 2017 a 2025, qualunque versione lo abbia scritto. Identity, collation e tipi come xml e hierarchyid restano come sono, e ogni modifica è elencata nel report.

Il tuo file
sqlshop_2024_sqlserver.sqlFile di esempio, 11 kB
Il tuo database

18 righe convertite, 1 correzione, nessuna rifiutata

Mostra

Tabelle in shop_2024_sqlserver.sqlDump SQL Server · scritto da SQL Server Management Objects · utf-8

  • orders10 righe
    11 colonne
    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 righe1
    8 colonne
    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 convertiti

  • Vista paid_orders
  • Trigger orders_no_negative

Ogni database li scrive nel proprio linguaggio. Riscrivili per 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

Correzioni

  1. "row_version" di customers è una versione di riga che SQL Server imposta da solo; il dump non ha valori per essa, quindi è binary(8) e vuota.

Da controllare

  • 2 viste, trigger, routine o eventi non sono convertiti; il report li elenca uno per uno. Ricreali a mano in SQL Server.
  • Il vincolo CHECK check1 su orders non si può scrivere per SQL Server (function isjson), quindi non viene creato. Se conta, scrivi a mano il vincolo CHECK.
  • L'indice idx_orders_pending su orders usa un'espressione che non si può scrivere per SQL Server (an index on an expression), quindi non viene creato. Crea l'indice a mano se le query ne hanno bisogno.

Il tuo file viene convertito su questo computer e non viene mai caricato.

Altri esempi:

Cosa cambia tra il file e lo script

Ogni riga è una regola che il convertitore applica, con la riga del report che scrive quando la regola cambia qualcosa nei tuoi dati.

  • bit

    bit

    Lo stesso tipo.

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

    nchar(n), nvarchar(n) e nvarchar(max), con la collation di ogni colonna

    nvarchar contiene ogni carattere, qualunque fosse la code page di una colonna varchar. Le collation UTF-8, che SQL Server 2017 non ha, diventano la loro gemella Unicode.

  • column collations

    la stessa collation su ogni colonna

    Le colonne confrontano e ordinano come prima, e le chiavi univoche separano le stesse righe.

  • decimal(p,s), money, smallmoney

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

    Ogni cifra viene mantenuta, money con i suoi quattro decimali.

  • datetime, datetime2, smalldatetime

    datetime2(p)

    datetime2 contiene ogni valore datetime e smalldatetime, dall'anno 1, con la stessa precisione.

  • datetimeoffset

    datetimeoffset, con l'offset di ogni valore

    Lo stesso tipo e gli stessi valori.

  • time

    time(p)

    Lo stesso tipo.

  • dates that aren't valid

    NULL

    Un valore che non è una data diventa NULL e il report lo conta.

    Riga del report: date_out_of_range

  • json (SQL Server 2025)

    nvarchar(max)

    Gli stessi valori JSON, che le funzioni JSON di SQL Server leggono.

  • uniqueidentifier

    uniqueidentifier

    Lo stesso tipo.

  • binary, varbinary, image

    binary(n), varbinary(n) e varbinary(max)

    I byte restano byte.

  • xml, sql_variant, hierarchyid, geometry, geography

    gli stessi tipi

    I tipi propri di SQL Server vengono mantenuti; i valori sql_variant mantengono il loro testo, quindi il loro tipo base diventa nvarchar.

  • rowversion, timestamp

    binary(8), vuota

    Una colonna rowversion non può ricevere le righe copiate, e SSMS non ne scrive i valori; aggiungila di nuovo dopo il caricamento se ti serve.

    Riga del report: rowversion_empty

  • IDENTITY

    IDENTITY, che riparte dopo l'id più alto

    Gli id copiati si caricano con IDENTITY_INSERT, e il contatore riparte dopo il più alto.

  • CREATE SEQUENCE

    CREATE SEQUENCE con le stesse opzioni

    Le sequenze di SQL Server funzionano allo stesso modo. SSMS non scrive fin dove è arrivata una sequenza, quindi riparte da dove è stata creata.

  • computed columns

    le stesse colonne calcolate, PERSISTED come nella sorgente

    Le stesse formule, calcolate dalla destinazione.

  • computed columns with functions IntoSQL doesn't write

    una colonna semplice

    Una formula che non si può scrivere lascia una colonna semplice e una riga nel report; SSMS non scrive valori per le colonne calcolate.

    Riga del report: generated_not_translated

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

    nessun valore predefinito

    Un valore predefinito che non si può scrivere viene omesso e segnalato.

    Riga del report: default_not_translated

  • CHECK constraints

    tradotti

    Gli stessi CHECK, verificati mentre ogni riga si carica.

  • CHECK constraints with functions IntoSQL doesn't write

    non creato

    Un vincolo CHECK che non si può scrivere viene omesso e segnalato.

    Riga del report: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    non creato

    SQL Server non applica questi CHECK, quindi le righe potrebbero violarli.

    Riga del report: check_not_enforced

  • filtered and columnstore indexes

    non creato

    IntoSQL scrive indici b-tree su colonne intere; ricrea gli altri dopo il caricamento.

    Riga del report: index_skipped

  • foreign keys

    dopo i dati WITH NOCHECK, poi controllata con un avviso sulle righe orfane

    La chiave viene creata dopo le righe e controllata alla fine; righe senza padre la lasciano non controllata con un avviso invece di fermare il caricamento.

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

    NO ACTION

    SQL Server rifiuta quelle cascate, quindi un dump non ne contiene mai; la riga è qui per gli script modificati a mano.

    Riga del report: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    non creato

    Una chiave non può riferirsi a una tabella che non c'è.

    Riga del report: foreign_key_skipped

  • tables on a partition scheme

    una tabella con le righe di ogni partizione

    Le righe sono le stesse; partiziona di nuovo la tabella in SQL Server se serve.

    Riga del report: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    due tabelle: le righe attuali e la cronologia

    La tabella e la sua tabella di cronologia vengono copiate come tabelle semplici; riattiva SYSTEM_VERSIONING per collegarle.

    Riga del report: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL rimosso

    Una colonna i cui valori sono dovuti diventare NULL non può mantenere NOT NULL, altrimenti il caricamento si fermerebbe.

    Riga del report: not_null_relaxed

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

    elencati nel report

    IntoSQL converte le tabelle e le loro righe; il resto viene elencato perché tu lo ricrei dallo script originale.

    Riga del report: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipi ricavati dai valori

    Uno script di soli dati contiene solo righe, quindi i tipi vengono ricavati dai valori.

    Riga del report: no_schema

  • expressions in INSERT values

    NULL

    Un convertitore che non esegue un database non può valutarle.

    Riga del report: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    Il testo contiene qualsiasi valore; cambia il tipo dopo il caricamento.

    Riga del report: unknown_type

  • NUL characters in text

    mantenuto

    nvarchar può contenere un carattere NUL, quindi il valore viene copiato così com'è.

  • text that isn't valid in its encoding

    i byte errati come carattere di sostituzione

    Lo script è UTF-8 e ogni valore deve essere testo valido.

    Riga del report: invalid_utf8_replaced

  • text decoded twice (ñ)

    copiato così com'è

    Lo script contiene esattamente questi caratteri, quindi vengono copiati; il report li segnala.

    Riga del report: mojibake_suspected

Nel fileNello scriptRiga del report
bitbitLo stesso tipo.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(n), nvarchar(n) e nvarchar(max), con la collation di ogni colonnanvarchar contiene ogni carattere, qualunque fosse la code page di una colonna varchar. Le collation UTF-8, che SQL Server 2017 non ha, diventano la loro gemella Unicode.
column collationsla stessa collation su ogni colonnaLe colonne confrontano e ordinano come prima, e le chiavi univoche separano le stesse righe.
decimal(p,s), money, smallmoneydecimal(p,s); money come decimal(19,4)Ogni cifra viene mantenuta, money con i suoi quattro decimali.
datetime, datetime2, smalldatetimedatetime2(p)datetime2 contiene ogni valore datetime e smalldatetime, dall'anno 1, con la stessa precisione.
datetimeoffsetdatetimeoffset, con l'offset di ogni valoreLo stesso tipo e gli stessi valori.
timetime(p)Lo stesso tipo.
dates that aren't validNULLUn valore che non è una data diventa NULL e il report lo conta.date_out_of_range
json (SQL Server 2025)nvarchar(max)Gli stessi valori JSON, che le funzioni JSON di SQL Server leggono.
uniqueidentifieruniqueidentifierLo stesso tipo.
binary, varbinary, imagebinary(n), varbinary(n) e varbinary(max)I byte restano byte.
xml, sql_variant, hierarchyid, geometry, geographygli stessi tipiI tipi propri di SQL Server vengono mantenuti; i valori sql_variant mantengono il loro testo, quindi il loro tipo base diventa nvarchar.
rowversion, timestampbinary(8), vuotaUna colonna rowversion non può ricevere le righe copiate, e SSMS non ne scrive i valori; aggiungila di nuovo dopo il caricamento se ti serve.rowversion_empty
IDENTITYIDENTITY, che riparte dopo l'id più altoGli id copiati si caricano con IDENTITY_INSERT, e il contatore riparte dopo il più alto.
CREATE SEQUENCECREATE SEQUENCE con le stesse opzioniLe sequenze di SQL Server funzionano allo stesso modo. SSMS non scrive fin dove è arrivata una sequenza, quindi riparte da dove è stata creata.
computed columnsle stesse colonne calcolate, PERSISTED come nella sorgenteLe stesse formule, calcolate dalla destinazione.
computed columns with functions IntoSQL doesn't writeuna colonna sempliceUna formula che non si può scrivere lascia una colonna semplice e una riga nel report; SSMS non scrive valori per le colonne calcolate.generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FORnessun valore predefinitoUn valore predefinito che non si può scrivere viene omesso e segnalato.default_not_translated
CHECK constraintstradottiGli stessi CHECK, verificati mentre ogni riga si carica.
CHECK constraints with functions IntoSQL doesn't writenon creatoUn vincolo CHECK che non si può scrivere viene omesso e segnalato.check_skipped
CHECK constraints added WITH NOCHECK or disablednon creatoSQL Server non applica questi CHECK, quindi le righe potrebbero violarli.check_not_enforced
filtered and columnstore indexesnon creatoIntoSQL scrive indici b-tree su colonne intere; ricrea gli altri dopo il caricamento.index_skipped
foreign keysdopo i dati WITH NOCHECK, poi controllata con un avviso sulle righe orfaneLa chiave viene creata dopo le righe e controllata alla fine; righe senza padre la lasciano non controllata con un avviso invece di fermare il caricamento.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server rifiuta quelle cascate, quindi un dump non ne contiene mai; la riga è qui per gli script modificati a mano.foreign_key_action_dropped
foreign keys to tables the dump doesn't createnon creatoUna chiave non può riferirsi a una tabella che non c'è.foreign_key_skipped
tables on a partition schemeuna tabella con le righe di ogni partizioneLe righe sono le stesse; partiziona di nuovo la tabella in SQL Server se serve.partitions_dropped
temporal tables (SYSTEM_VERSIONING)due tabelle: le righe attuali e la cronologiaLa tabella e la sua tabella di cronologia vengono copiate come tabelle semplici; riattiva SYSTEM_VERSIONING per collegarle.system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL rimossoUna colonna i cui valori sono dovuti diventare NULL non può mantenere NOT NULL, altrimenti il caricamento si fermerebbe.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionselencati nel reportIntoSQL converte le tabelle e le loro righe; il resto viene elencato perché tu lo ricrei dallo script originale.not_converted_objects
scripts without CREATE TABLE (data only)tipi ricavati dai valoriUno script di soli dati contiene solo righe, quindi i tipi vengono ricavati dai valori.no_schema
expressions in INSERT valuesNULLUn convertitore che non esegue un database non può valutarle.expression_value
types IntoSQL doesn't knownvarchar(max)Il testo contiene qualsiasi valore; cambia il tipo dopo il caricamento.unknown_type
NUL characters in textmantenutonvarchar può contenere un carattere NUL, quindi il valore viene copiato così com'è.
text that isn't valid in its encodingi byte errati come carattere di sostituzioneLo script è UTF-8 e ogni valore deve essere testo valido.invalid_utf8_replaced
text decoded twice (ñ)copiato così com'èLo script contiene esattamente questi caratteri, quindi vengono copiati; il report li segnala.mojibake_suspected

Carica lo script in SQL Server

Lo script crea le tabelle, copia le righe, poi aggiunge chiavi, indici e chiavi esterne, così si carica in fretta e si ferma al primo errore.

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

Le chiavi esterne vengono aggiunte WITH NOCHECK e poi controllate. Se una riga punta a una riga che non esiste, lo script dice quale vincolo e lo lascia non controllato, invece di fallire a metà.

Per un dump grande, esegui sqlcmd sulla stessa macchina del server. Ogni lotto di massimo 1000 righe fa il commit da solo, così il log delle transazioni resta piccolo.

Fai il dump di SQL Server per il miglior risultato

Il convertitore legge ciò che il dump contiene. Con queste opzioni il dump conserva più dei tuoi dati:

  • In SSMS, clic destro sul database, Tasks, Generate Scripts, e scegli le tabelle. dbatools, mssql-scripter e altri strumenti basati sulla stessa libreria scrivono lo stesso script.
  • In Advanced, imposta Types of data to script su Schema and data. Uno script del solo schema ha tabelle senza righe.
  • Salvalo come Unicode, il default di SSMS, o come UTF-8: entrambi vengono letti allo stesso modo, e funziona anche gzip.

Cosa non viene convertito

Viste, trigger, procedure, funzioni e altri oggetti scritti nel linguaggio di SQL Server sono elencati per nome nel report, mai eliminati in silenzio, così puoi verificare ognuno con la versione di SQL Server in cui carichi prima di ricrearlo.

Domande sul passaggio di SQL Server tra versioni

Non trovi la risposta? Scrivici dalla pagina dei contatti e ti risponde una persona. Pagina dei contatti

Il mio dump viene caricato?

No. Il convertitore funziona nel tuo browser e legge il dump dal tuo disco a pezzi, quindi non lascia mai il tuo computer. Anche l'app desktop e la riga di comando convertono sul tuo computer.

Quanto può essere grande il dump?

Il convertitore non tiene mai l'intero dump in memoria: legge il file due volte, per intervalli, e scrive lo script man mano. I dump di più gigabyte si convertono nel browser, nell'app desktop e con la riga di comando.

Legge il file UTF-16 che salva SSMS?

Sì. SSMS salva gli script in UTF-16 di default, e il convertitore legge allo stesso modo UTF-16 e UTF-8, compressi con gzip o no, con GO tra i batch.

Da quali versioni di SQL Server può provenire lo script?

Script scritti da SSMS, dbatools o mssql-scripter da SQL Server 2017 in poi. Ogni script di test viene da SQL Server 2017, 2022 e 2025 ed è confrontato con la sorgente cella per cella.

I valori IDENTITY vengono mantenuti?

Sì. Le colonne IDENTITY si caricano con IDENTITY_INSERT, ogni riga mantiene il suo id e il contatore riparte dopo il più alto. Le sequenze vengono create con le stesse opzioni.

Cosa succede a money, datetimeoffset e altri tipi di SQL Server?

Restano come sono, inclusi xml, sql_variant, hierarchyid, geometry e geography, e ogni colonna di testo mantiene la sua collation. I valori datetimeoffset mantengono i loro offset. Le colonne rowversion sono binary(8), perché lo script non ha valori per loro.

E procedure, trigger e viste?

Sono elencati per nome nel report e non vengono convertiti, così puoi eseguire la loro parte dello script originale una volta caricate le tabelle.

Su quali versioni di SQL Server si carica lo script?

SQL Server dalla 2017 alla 2025, qualunque versione abbia scritto lo script. Lo stesso script si carica su ognuna, fermandosi al primo errore se qualcosa va storto.