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.
18 linhas convertidas, 1 correção, nenhuma rejeitada
Tabelas em shop_2024_sqlserver.sqlDump do SQL Server · gerado por SQL Server Management Objects · utf-8
orders10 linhas
11 colunas id int not null customer_id int not null status nvarchar(10) not null total decimal(19,4) not null items tinyint not null ordered_at datetime2(0) not null shipped_at datetime2(7) note nvarchar(max) details nvarchar(max) order_ref uniqueidentifier not null total_with_tax decimal(12,2) customers8 linhas1
8 colunas id int not null name nvarchar(100) not null email nvarchar(200) not null country nchar(2) not null is_active bit not null signed_up date created_at datetimeoffset(0) not null row_version binary(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
- "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 arquivo | No script | Linha do relatório |
|---|---|---|
| bit | bitO 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 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 collations | a 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, 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 valorO mesmo tipo e os mesmos valores. | |
| time | time(p)O mesmo tipo. | |
| dates that aren't valid | NULLUm 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. | |
| uniqueidentifier | uniqueidentifierO mesmo tipo. | |
| binary, varbinary, image | binary(n), varbinary(n) e varbinary(max)Bytes continuam sendo bytes. | |
| xml, sql_variant, hierarchyid, geometry, geography | os 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, timestamp | binary(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 |
| IDENTITY | IDENTITY, continuando depois do maior idOs ids copiados carregam com IDENTITY_INSERT, e o contador continua depois do maior deles. | |
| CREATE SEQUENCE | CREATE 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 columns | as mesmas colunas computadas, PERSISTED como na origemAs mesmas fórmulas, calculadas pelo destino. | |
| computed columns with functions IntoSQL doesn't write | uma 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 FOR | sem valor padrãoUm valor padrão que não pode ser escrito fica de fora e é informado. | default_not_translated |
| CHECK constraints | traduzidosOs mesmos CHECKs, testados à medida que cada linha carrega. | |
| CHECK constraints with functions IntoSQL doesn't write | não criadoUm CHECK que não pode ser escrito fica de fora e é informado. | check_skipped |
| CHECK constraints added WITH NOCHECK or disabled | não criadoO SQL Server não aplica esses CHECKs, então as linhas podem violá-los. | check_not_enforced |
| filtered and columnstore indexes | não criadoO IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga. | index_skipped |
| foreign keys | depois 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 path | NO 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 create | não criadoUma chave não pode apontar para uma tabela que não existe. | foreign_key_skipped |
| tables on a partition scheme | uma 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 NULL | NOT 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 functions | listados 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 values | NULLUm conversor que não executa um banco de dados não consegue avaliá-las. | expression_value |
| types IntoSQL doesn't know | nvarchar(max)O tipo text aceita qualquer valor; mude o tipo depois da carga. | unknown_type |
| NUL characters in text | mantidonvarchar 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çã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.sqlAs 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.