Pular para o conteúdo
Início do IntoSQL

Leve um script do SQL Server para um SQL Server mais antigo ou mais novo

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.

Seu arquivo
sqlshop_2024_sqlserver.sqlArquivo de exemplo, 11 kB
Seu banco de dados

18 linhas convertidas, 1 correção, nenhuma rejeitada

Mostrar

Tabelas em shop_2024_sqlserver.sqlDump do SQL Server · gerado por SQL Server Management Objects · utf-8

  • orders10 linhas
    11 colunas
    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 linhas1
    8 colunas
    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)

Não convertidos

  • Visão paid_orders
  • Gatilho orders_no_negative

Cada banco de dados escreve estes objetos na sua própria linguagem. Reescreva-os para o 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

Correções

  1. "row_version" de customers é uma versão de linha que o SQL Server define sozinho; o dump não tem valores para ela, então vira binary(8) e fica vazia.

Para revisar

  • 2 visões, gatilhos, rotinas ou eventos não foram convertidos; o relatório lista cada um. Recrie-os manualmente no SQL Server.
  • O CHECK check1 de orders não pode ser escrito para o SQL Server (function isjson), então não é criado. Escreva o CHECK manualmente se ele for importante.
  • O índice idx_orders_pending de orders usa uma expressão que não pode ser escrita para o SQL Server (an index on an expression), então não é criado. Crie o índice manualmente se as consultas precisarem dele.

Seu arquivo é convertido neste computador e nunca é enviado.

Outros exemplos:

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.

  • bit

    bit

    O mesmo tipo.

  • 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

    nvarchar comporta qualquer caractere, qualquer que fosse a página de código de uma coluna varchar. Collations UTF-8, que o SQL Server 2017 não tem, viram sua gêmea Unicode.

  • column collations

    a mesma collation em cada coluna

    As colunas comparam e ordenam como antes, e as chaves únicas mantêm as mesmas linhas separadas.

  • decimal(p,s), money, smallmoney

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

    Cada dígito é mantido, e money com suas quatro casas decimais.

  • datetime, datetime2, smalldatetime

    datetime2(p)

    datetime2 comporta todo valor datetime e smalldatetime, desde o ano 1, com a mesma precisão.

  • datetimeoffset

    datetimeoffset, com o fuso de cada valor

    O mesmo tipo e os mesmos valores.

  • time

    time(p)

    O mesmo tipo.

  • dates that aren't valid

    NULL

    Um valor que não é uma data vira NULL e o relatório o conta.

    Linha do relatório: date_out_of_range

  • json (SQL Server 2025)

    nvarchar(max)

    Os mesmos valores JSON, que as funções JSON do SQL Server leem.

  • uniqueidentifier

    uniqueidentifier

    O mesmo tipo.

  • binary, varbinary, image

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

    Bytes continuam sendo bytes.

  • xml, sql_variant, hierarchyid, geometry, geography

    os mesmos tipos

    Os tipos próprios do SQL Server são mantidos; os valores sql_variant mantêm seu texto, então seu tipo base vira nvarchar.

  • rowversion, timestamp

    binary(8), sem valores

    Uma coluna rowversion não aceita as linhas copiadas, e o SSMS não escreve valores para ela; adicione-a de novo depois da carga se precisar.

    Linha do relatório: rowversion_empty

  • IDENTITY

    IDENTITY, continuando depois do maior id

    Os ids copiados carregam com IDENTITY_INSERT, e o contador continua depois do maior deles.

  • CREATE SEQUENCE

    CREATE SEQUENCE com as mesmas opções

    As sequências do SQL Server funcionam do mesmo jeito. O SSMS não escreve até onde uma sequência chegou, então ela começa onde foi criada.

  • computed columns

    as mesmas colunas computadas, PERSISTED como na origem

    As mesmas fórmulas, calculadas pelo destino.

  • computed columns with functions IntoSQL doesn't write

    uma coluna simples

    Uma fórmula que não pode ser escrita deixa uma coluna simples e uma linha no relatório; o SSMS não escreve valores para colunas computadas.

    Linha do relatório: generated_not_translated

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

    sem valor padrão

    Um valor padrão que não pode ser escrito fica de fora e é informado.

    Linha do relatório: default_not_translated

  • CHECK constraints

    traduzidos

    Os mesmos CHECKs, testados à medida que cada linha carrega.

  • CHECK constraints with functions IntoSQL doesn't write

    não criado

    Um CHECK que não pode ser escrito fica de fora e é informado.

    Linha do relatório: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    não criado

    O SQL Server não aplica esses CHECKs, então as linhas podem violá-los.

    Linha do relatório: check_not_enforced

  • filtered and columnstore indexes

    não criado

    O IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga.

    Linha do relatório: index_skipped

  • foreign keys

    depois dos dados WITH NOCHECK, e então verificada com um aviso sobre órfãos

    A chave é criada depois das linhas e verificada por último; linhas sem pai a deixam sem verificação com um aviso, em vez de parar a carga.

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

    NO ACTION

    O SQL Server recusa essas cascatas, então um dump nunca contém uma; a linha está aqui para scripts editados à mão.

    Linha do relatório: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    não criado

    Uma chave não pode apontar para uma tabela que não existe.

    Linha do relatório: foreign_key_skipped

  • tables on a partition scheme

    uma tabela com as linhas de todas as partições

    As linhas são as mesmas; particione a tabela de novo no SQL Server se precisar.

    Linha do relatório: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    duas tabelas: as linhas atuais e o histórico

    A tabela e sua tabela de histórico são copiadas como tabelas simples; ative SYSTEM_VERSIONING de novo para ligá-las.

    Linha do relatório: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL removido

    Uma coluna cujos valores tiveram de virar NULL não pode manter NOT NULL, senão a carga pararia.

    Linha do relatório: not_null_relaxed

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

    listados no relatório

    O IntoSQL converte tabelas e suas linhas; o resto é listado para você recriar a partir do script original.

    Linha do relatório: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipos deduzidos dos valores

    Um script só de dados tem apenas linhas, então os tipos vêm dos valores.

    Linha do relatório: no_schema

  • expressions in INSERT values

    NULL

    Um conversor que não executa um banco de dados não consegue avaliá-las.

    Linha do relatório: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    O tipo text aceita qualquer valor; mude o tipo depois da carga.

    Linha do relatório: unknown_type

  • NUL characters in text

    mantido

    nvarchar aceita o caractere NUL, então o valor é copiado como está.

  • text that isn't valid in its encoding

    os bytes inválidos como o caractere de substituição

    O script é UTF-8 e todo valor precisa ser texto válido.

    Linha do relatório: invalid_utf8_replaced

  • text decoded twice (ñ)

    copiado como está

    O script contém exatamente esses caracteres, então eles são copiados; o relatório os aponta.

    Linha do relatório: mojibake_suspected

No arquivoNo scriptLinha do relatório
bitbitO mesmo tipo.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text, ntextnchar(n), nvarchar(n) e nvarchar(max), com a collation de cada colunanvarchar comporta qualquer caractere, qualquer que fosse a página de código de uma coluna varchar. Collations UTF-8, que o SQL Server 2017 não tem, viram sua gêmea Unicode.
column collationsa mesma collation em cada colunaAs colunas comparam e ordenam como antes, e as chaves únicas mantêm as mesmas linhas separadas.
decimal(p,s), money, smallmoneydecimal(p,s); money como decimal(19,4)Cada dígito é mantido, e money com suas quatro casas decimais.
datetime, datetime2, smalldatetimedatetime2(p)datetime2 comporta todo valor datetime e smalldatetime, desde o ano 1, com a mesma precisão.
datetimeoffsetdatetimeoffset, com o fuso de cada valorO mesmo tipo e os mesmos valores.
timetime(p)O mesmo tipo.
dates that aren't validNULLUm valor que não é uma data vira NULL e o relatório o conta.date_out_of_range
json (SQL Server 2025)nvarchar(max)Os mesmos valores JSON, que as funções JSON do SQL Server leem.
uniqueidentifieruniqueidentifierO mesmo tipo.
binary, varbinary, imagebinary(n), varbinary(n) e varbinary(max)Bytes continuam sendo bytes.
xml, sql_variant, hierarchyid, geometry, geographyos mesmos tiposOs tipos próprios do SQL Server são mantidos; os valores sql_variant mantêm seu texto, então seu tipo base vira nvarchar.
rowversion, timestampbinary(8), sem valoresUma coluna rowversion não aceita as linhas copiadas, e o SSMS não escreve valores para ela; adicione-a de novo depois da carga se precisar.rowversion_empty
IDENTITYIDENTITY, continuando depois do maior idOs ids copiados carregam com IDENTITY_INSERT, e o contador continua depois do maior deles.
CREATE SEQUENCECREATE SEQUENCE com as mesmas opçõesAs sequências do SQL Server funcionam do mesmo jeito. O SSMS não escreve até onde uma sequência chegou, então ela começa onde foi criada.
computed columnsas mesmas colunas computadas, PERSISTED como na origemAs mesmas fórmulas, calculadas pelo destino.
computed columns with functions IntoSQL doesn't writeuma coluna simplesUma fórmula que não pode ser escrita deixa uma coluna simples e uma linha no relatório; o SSMS não escreve valores para colunas computadas.generated_not_translated
defaults with functions IntoSQL doesn't write, and NEXT VALUE FORsem valor padrãoUm valor padrão que não pode ser escrito fica de fora e é informado.default_not_translated
CHECK constraintstraduzidosOs mesmos CHECKs, testados à medida que cada linha carrega.
CHECK constraints with functions IntoSQL doesn't writenão criadoUm CHECK que não pode ser escrito fica de fora e é informado.check_skipped
CHECK constraints added WITH NOCHECK or disablednão criadoO SQL Server não aplica esses CHECKs, então as linhas podem violá-los.check_not_enforced
filtered and columnstore indexesnão criadoO IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga.index_skipped
foreign keysdepois dos dados WITH NOCHECK, e então verificada com um aviso sobre órfãosA chave é criada depois das linhas e verificada por último; linhas sem pai a deixam sem verificação com um aviso, em vez de parar a carga.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONO SQL Server recusa essas cascatas, então um dump nunca contém uma; a linha está aqui para scripts editados à mão.foreign_key_action_dropped
foreign keys to tables the dump doesn't createnão criadoUma chave não pode apontar para uma tabela que não existe.foreign_key_skipped
tables on a partition schemeuma tabela com as linhas de todas as partiçõesAs linhas são as mesmas; particione a tabela de novo no SQL Server se precisar.partitions_dropped
temporal tables (SYSTEM_VERSIONING)duas tabelas: as linhas atuais e o históricoA tabela e sua tabela de histórico são copiadas como tabelas simples; ative SYSTEM_VERSIONING de novo para ligá-las.system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL removidoUma coluna cujos valores tiveram de virar NULL não pode manter NOT NULL, senão a carga pararia.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionslistados no relatórioO IntoSQL converte tabelas e suas linhas; o resto é listado para você recriar a partir do script original.not_converted_objects
scripts without CREATE TABLE (data only)tipos deduzidos dos valoresUm script só de dados tem apenas linhas, então os tipos vêm dos valores.no_schema
expressions in INSERT valuesNULLUm conversor que não executa um banco de dados não consegue avaliá-las.expression_value
types IntoSQL doesn't knownvarchar(max)O tipo text aceita qualquer valor; mude o tipo depois da carga.unknown_type
NUL characters in textmantidonvarchar aceita o caractere NUL, então o valor é copiado como está.
text that isn't valid in its encodingos bytes inválidos como o caractere de substituiçãoO script é UTF-8 e todo valor precisa ser texto válido.invalid_utf8_replaced
text decoded twice (ñ)copiado como estáO script contém exatamente esses caracteres, então eles são copiados; o relatório os aponta.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.

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

Não encontrou a resposta? Escreva para nós pela página de contato e uma pessoa responde. Página de contato

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.