---
title: "Levar um script do SQL Server para outra versão"
description: "Converta um script do SSMS do SQL Server 2017 ou posterior em um que carrega no SQL Server 2017 ao 2025, com as mesmas tabelas, chaves e dados."
canonical: https://intosql.com/pt-br/sql-server-para-sql-server
last_updated: 2026-10-15
---

# Levar um script do SQL Server para outra versão

Solte o script que o Generate Scripts do SSMS escreve com esquema e dados, como .sql ou .sql.gz, em UTF-16 ou UTF-8, e baixe um que carrega no SQL Server 2017 ao 2025, seja qual for a versão que o escreveu. Identities, collations e tipos como xml e hierarchyid ficam como estão, e cada mudança é listada no relatório.

[Guia de migração de SQL Server para SQL Server](https://intosql.com/docs/migrations/sql-server-to-sql-server)

[Tipos de dados de SQL Server para SQL Server](https://intosql.com/docs/types/sql-server-to-sql-server)

## O que muda entre o arquivo e o script

Cada linha é uma regra que o conversor aplica, com a linha do relatório que ele escreve quando a regra muda algo nos seus dados.

| No arquivo | No script | Linha do relatório |
| --- | --- | --- |
| bit | bit |  |
| char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntext | nchar(n), nvarchar(n) e nvarchar(max), com a collation de cada coluna |  |
| column collations | a mesma collation em cada coluna |  |
| decimal(p,s), money, smallmoney | decimal(p,s); money como decimal(19,4) |  |
| datetime, datetime2, smalldatetime | datetime2(p) |  |
| datetimeoffset | datetimeoffset, com o fuso de cada valor |  |
| 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 | os mesmos tipos |  |
| rowversion, timestamp | binary(8), sem valores | `rowversion_empty` |
| IDENTITY | IDENTITY, continuando depois do maior id |  |
| CREATE SEQUENCE | CREATE SEQUENCE com as mesmas opções |  |
| computed columns | as mesmas colunas computadas, PERSISTED como na origem |  |
| computed columns with functions IntoSQL doesn't write | uma coluna simples | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write, and NEXT VALUE FOR | sem valor padrão | `default_not_translated` |
| CHECK constraints | traduzidos |  |
| CHECK constraints with functions IntoSQL doesn't write | não criado | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | não criado | `check_not_enforced` |
| filtered and columnstore indexes | não criado | `index_skipped` |
| foreign keys | depois dos dados WITH NOCHECK, e então verificada com um aviso sobre órfãos |  |
| 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 | não criado | `foreign_key_skipped` |
| tables on a partition scheme | uma tabela com as linhas de todas as partições | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | duas tabelas: as linhas atuais e o histórico | `system_versioning_dropped` |
| NOT NULL columns with values that become NULL | NOT NULL removido | `not_null_relaxed` |
| views, functions, procedures, triggers, synonyms, types and partition functions | listados no relatório | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | tipos deduzidos dos valores | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | nvarchar(max) | `unknown_type` |
| NUL characters in text | mantido |  |
| text that isn't valid in its encoding | os bytes inválidos como o caractere de substituição | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiado como está | `mojibake_suspected` |

## Carregue o script no SQL Server

O script cria as tabelas, copia as linhas e depois adiciona chaves, índices e chaves estrangeiras, então carrega rápido e para no primeiro erro.

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

As chaves estrangeiras são adicionadas WITH NOCHECK e depois verificadas. Se uma linha aponta para uma linha que não existe, o script informa qual restrição e a deixa sem verificação, em vez de falhar no meio do caminho.

Para um dump grande, execute o sqlcmd na mesma máquina do servidor. Cada lote de até 1000 linhas faz commit sozinho, então o log de transações continua pequeno.

## Gere o dump do SQL Server para o melhor resultado

O conversor lê o que o dump contém. Estas opções mantêm mais dos seus dados nele:

- No SSMS, clique com o botão direito no banco de dados, Tasks, Generate Scripts, e escolha as tabelas. dbatools, mssql-scripter e outras ferramentas feitas sobre a mesma biblioteca escrevem o mesmo script.
- Em Advanced, defina Types of data to script como Schema and data. Um script só do schema tem tabelas sem linhas.
- Salve como Unicode, o padrão do SSMS, ou como UTF-8: os dois são lidos do mesmo jeito, e gzip também funciona.

## O que não é convertido

Views, triggers, procedures, funções e outros objetos escritos na própria linguagem do SQL Server aparecem no relatório pelo nome, nunca são descartados em silêncio, para você conferir cada um com a versão do SQL Server em que vai carregar antes de recriá-lo.

## Perguntas sobre levar o SQL Server entre versões

### Meu dump é enviado?

Não. O conversor roda no seu navegador e lê o dump do seu disco em partes, então ele nunca sai do seu computador. O app para desktop e a linha de comando também convertem no seu computador.

### Qual o tamanho máximo do dump?

O conversor nunca guarda o dump inteiro na memória: ele lê o arquivo duas vezes, por intervalos, e escreve o script à medida que avança. Dumps de vários gigabytes são convertidos no navegador, no app para desktop e com a linha de comando.

### Ele lê o arquivo UTF-16 que o SSMS salva?

Sim. O SSMS salva scripts em UTF-16 por padrão, e o conversor lê UTF-16 e UTF-8 do mesmo jeito, com ou sem gzip, com GO entre os lotes.

### De quais versões do SQL Server o script pode vir?

Scripts que o SSMS, o dbatools ou o mssql-scripter escrevem a partir do SQL Server 2017. Cada script de teste vem do SQL Server 2017, 2022 e 2025 e é comparado com a origem célula por célula.

### Os valores IDENTITY são mantidos?

Sim. As colunas IDENTITY carregam com IDENTITY_INSERT, cada linha mantém seu id, e o contador continua depois do maior. As sequências são criadas com as mesmas opções.

### O que acontece com money, datetimeoffset e outros tipos do SQL Server?

Eles ficam como estão, incluindo xml, sql_variant, hierarchyid, geometry e geography, e cada coluna de texto mantém sua collation. Os valores datetimeoffset mantêm seus fusos. Colunas rowversion viram binary(8), porque o script não tem valores para elas.

### E os procedimentos, gatilhos e visões?

Eles aparecem no relatório pelo nome e não são convertidos, para que você possa rodar a parte deles do script original depois que as tabelas estiverem carregadas.

### Em quais versões do SQL Server o script carrega?

SQL Server 2017 a 2025, qualquer que seja a versão que escreveu o script. O mesmo script carrega em cada uma delas e para no primeiro erro se algo der errado.

## De SQL Server

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

## Para SQL Server

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

## Guia e todos os pares

- [Guia de migração de SQL Server para SQL Server](https://intosql.com/docs/migrations/sql-server-to-sql-server)
- [Tipos de dados de SQL Server para SQL Server](https://intosql.com/docs/types/sql-server-to-sql-server)
- [Todos os pares de bancos de dados](https://intosql.com/pt-br/migracao-de-banco-de-dados)
