---
title: "Portare uno script SQL Server a un'altra versione"
description: "Converti uno script SSMS di SQL Server 2017 o successivo in uno che si carica su SQL Server da 2017 a 2025, con le stesse tabelle, chiavi e dati, e un report."
canonical: https://intosql.com/it/sql-server-in-sql-server
last_updated: 2026-10-15
---

# Portare uno script SQL Server a un'altra versione

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.

[Guida alla migrazione da SQL Server a SQL Server](https://intosql.com/docs/migrations/sql-server-to-sql-server)

[Tipi di dati da SQL Server a SQL Server](https://intosql.com/docs/types/sql-server-to-sql-server)

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

| Nel file | Nello script | Riga del report |
| --- | --- | --- |
| bit | bit |  |
| 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 |  |
| column collations | la stessa collation su ogni colonna |  |
| decimal(p,s), money, smallmoney | decimal(p,s); money come decimal(19,4) |  |
| datetime, datetime2, smalldatetime | datetime2(p) |  |
| datetimeoffset | datetimeoffset, con l'offset di ogni valore |  |
| 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) e varbinary(max) |  |
| xml, sql_variant, hierarchyid, geometry, geography | gli stessi tipi |  |
| rowversion, timestamp | binary(8), vuota | `rowversion_empty` |
| IDENTITY | IDENTITY, che riparte dopo l'id più alto |  |
| CREATE SEQUENCE | CREATE SEQUENCE con le stesse opzioni |  |
| computed columns | le stesse colonne calcolate, PERSISTED come nella sorgente |  |
| computed columns with functions IntoSQL doesn't write | una colonna semplice | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR | nessun valore predefinito | `default_not_translated` |
| CHECK constraints | tradotti |  |
| CHECK constraints with functions IntoSQL doesn't write | non creato | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | non creato | `check_not_enforced` |
| filtered and columnstore indexes | non creato | `index_skipped` |
| foreign keys | dopo i dati WITH NOCHECK, poi controllata con un avviso sulle righe orfane |  |
| 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 creato | `foreign_key_skipped` |
| tables on a partition scheme | una tabella con le righe di ogni partizione | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | due tabelle: le righe attuali e la cronologia | `system_versioning_dropped` |
| NOT NULL columns with values that become NULL | NOT NULL rimosso | `not_null_relaxed` |
| views, functions, procedures, triggers, synonyms, types and partition functions | elencati nel report | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | tipi ricavati dai valori | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | nvarchar(max) | `unknown_type` |
| NUL characters in text | mantenuto |  |
| text that isn't valid in its encoding | i byte errati come carattere di sostituzione | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiato così com'è | `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.

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

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

## Da SQL Server

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

## Verso SQL Server

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

## Guida e tutte le coppie

- [Guida alla migrazione da SQL Server a SQL Server](https://intosql.com/docs/migrations/sql-server-to-sql-server)
- [Tipi di dati da SQL Server a SQL Server](https://intosql.com/docs/types/sql-server-to-sql-server)
- [Tutte le coppie di database](https://intosql.com/it/migrazione-database)
