Exportando dados no SQL Server como INSERT INTO


413

Estou usando o SQL Server 2008 Management Studio e tenho uma tabela que desejo migrar para um servidor db diferente.

Existe alguma opção para exportar os dados como uma inserção no script SQL?

Respostas:


682

No SSMS no Pesquisador de Objetos, clique com o botão direito do mouse no banco de dados, clique com o botão direito do mouse e escolha "Tarefas" e, em seguida, "Gerar Scripts".

Isso permitirá que você gere scripts para uma ou todas as tabelas, e uma das opções é "Script Data". Se você definir como TRUE, o assistente gerará um script com a instrução INSERT INTO () para seus dados.

Se o uso de 2008 R2 ou 2012 for chamado de outra coisa, veja a captura de tela abaixo desta

texto alternativo

2008 R2 ou posterior, por exemplo, 2012

Selecione "Tipos de dados para script", que podem ser "Somente dados", "Esquema e dados" ou "Somente esquema" - o padrão).

insira a descrição da imagem aqui

E depois há um pacote " SSMS Addin " no Codeplex (incluindo código-fonte) que promete praticamente a mesma funcionalidade e mais alguns (como busca rápida, etc.)

texto alternativo


Acabei de instalar o addin do Codeplex. Agradável. Obrigado pela informação.
22430 Rob Garrison

1
O SMSS Add In funcionou para mim em 2008. O Data Scripter Add In não.
Phil Hale

5
No 2008 R2, a opção "Tipos de dados para script" pode ser encontrada na tela "Definir opções de script". Pressione o botão "Avançado" lá.
raymi

3
Esses suplementos funcionam no 2008 R2? O suplemento SSMS está lançando uma exceção no carregamento.
jocull

2
Dê uma olhada na resposta @ruffin abaixo para mais imagens
Keith Sirmons

117

Por uma questão de falta de inteligência explícita, depois de seguir as instruções de marc_s até aqui ...

No SSMS no Pesquisador de Objetos, clique com o botão direito do mouse no banco de dados e selecione "Tarefas" e, em seguida, "Gerar Scripts".

... Então, vejo uma tela do assistente com " Introdução, Escolha objetos, Definir opções de script, Resumo e Salvar ou publicar scripts " com os botões prev, next, finish, cancel na parte inferior.

Na etapa Definir opções de script , você deve clicar em "Avançado" para obter a página com as opções. Então, como Ghlouw mencionou, agora você seleciona "Tipos de dados para script" e lucro.

botão avançado DESTACADO NO VERMELHO! 1 !!


13
Obrigado, este botão não possui posicionamento muito intuitivo. Suponho que ele pertença a "Salvar no arquivo".
22416 Karel Kral

48

Se você o usar, SQLServer 2008R2, precisará definir Tipos de dados no campo de script.

insira a descrição da imagem aqui


2
Também se aplica a 2012.
OldCurmudgeon

1
Também se aplica a 2014.
NucS

2
Se você estiver confuso como eu, a opção "Tipos de dados para script" estará visível apenas nas opções "Avançadas" do assistente "Gerar scripts ..." - você não a encontrará na caixa de diálogo das opções principais!
Etherman

36

Se você estiver executando o SQL Server 2008 R2, as opções internas para fazer isso no SSMS, pois o marc_s descrito acima mudou um pouco. Em vez de selecionar Script data = truecomo mostrado em seu diagrama, agora existe uma nova opção chamada "Types of data to script"logo acima do grupo "Opções de tabela / exibição". Aqui você pode selecionar somente scripts de dados, esquema e dados ou somente esquema. Funciona como um encanto.



6

Para quem procura uma versão em linha de comando, a Microsoft lançoumssql-scripter para fazer isso:

$ pip install mssql-scripter

# Generate DDL scripts for all database objects and DML scripts (INSERT statements)
# for all tables in the Adventureworks database and save the script files in
# the current directory
$ mssql-scripter -S localhost -d AdventureWorks -U sa --schema-and-data \
                 -f './' --file-per-object

Parece que o mssql-scripter é um projeto morto agora.
Alex Suzuki

É verdade que nenhum desenvolvimento aconteceu no ano passado, mas funciona bem para mim.
Nickolay

3

Atualizando capturas de tela para ajudar outras pessoas, pois estou usando uma v18 mais recente, por volta de 2019.

Clique com o botão direito do mouse em DB: Tarefas> Gerar Scripts

Aqui você pode selecionar determinadas tabelas ou escolher o padrão de todas.

Aqui você pode selecionar determinadas tabelas ou escolher o padrão de todas. Para minhas próprias necessidades, estou indicando apenas uma tabela.

A seguir, há as "Opções de script", nas quais você pode escolher o arquivo de saída, etc. Como nas várias respostas acima (novamente, estou apenas tirando as respostas antigas das mais recentes, v18.4 SQL Server Management Studio), o que realmente queremos está sob o botão "Avançado". Para meus próprios propósitos, preciso apenas dos dados.

Opções gerais de saída, incluindo saída para arquivo. Opções avançadas, incluindo dados!

Finalmente, há um resumo da revisão antes da execução. Após a execução, é exibido um relatório do status das operações. Resumo da revisão.


2

Você também pode conferir o "Data Scripter Add-In" para o SQL Server Management Studio 2008 em:

http://www.mssql-vehicle-data.com/SSMS


Sua lista de recursos:

  • Foi desenvolvido no SSMS 2008 e não é suportado na versão 2005 no momento (em breve!)

  • Exporte dados rapidamente para a sintaxe T-SQL para MSSQL e MySQL

  • CSV, TXT, XML também são suportados! Aproveite todo o potencial, poder e velocidade que o SQL tem a oferecer.

  • Não espere que o Access ou o Excel faça um trabalho de script para você, o que pode levar alguns minutos - deixe o SQL Server fazer isso por você e elimine toda a suposição de exportar seus dados!

  • Personalize sua saída de dados para backups rápidos, manipulação de DDL e muito mais ...

  • Altere nomes de tabelas e esquemas de banco de dados de acordo com suas necessidades, de forma rápida e eficiente

  • Exporte nomes de colunas ou simplesmente gere dados sem os nomes.

  • Você pode escolher colunas individuais para o script.

  • Você pode escolher subconjuntos de dados (cláusula WHERE).

  • Você pode escolher a ordem dos dados (cláusula ORDER BY).

  • Ótimo utilitário de backup para as operações de depuração de banco de dados sujas que exigem manipulação de dados. Não perca dados ao experimentar. Manipule dados em tempo real!


2

Tudo acima é bom, mas se você precisar

  1. Exporte dados de várias visualizações e tabelas com junções
  2. Crie instruções de inserção para diferentes RDBMSs
  3. Migrar dados de qualquer RDBMS para qualquer RDBMS

então o truque a seguir é o único caminho.

Primeiro aprenda como criar arquivos de spool ou exportar conjuntos de resultados do cliente de linha de comando db de origem. Segundo, aprenda a executar instruções sql no banco de dados de destino.

Por fim, crie as instruções de inserção (e quaisquer outras instruções) para o banco de dados de destino executando um script sql no banco de dados de origem. por exemplo

SELECT '-- SET the correct schema' FROM dual;
SELECT 'USE test;' FROM dual;
SELECT '-- DROP TABLE IF EXISTS' FROM dual;
SELECT 'IF OBJECT_ID(''table3'', ''U'') IS NOT NULL DROP TABLE dbo.table3;' FROM dual;
SELECT '-- create the table' FROM dual;
SELECT 'CREATE TABLE table3 (column1 VARCHAR(10), column2 VARCHAR(10));' FROM dual;

SELECT 'INSERT INTO table3 (column1, column2) VALUES (''', table1.column1, ''',''', table2.column2, ''');' FROM table1 JOIN table2 ON table2.COLUMN1 = table1.COLUMN1;

O exemplo acima foi criado para o banco de dados Oracle, onde o uso de dual é necessário para seleções sem tabela.

O conjunto de resultados conterá o script para o banco de dados de destino.


1

Aqui está um exemplo de criação de um script de migração de dados usando um cursor para iterar a tabela de origem.

SET NOCOUNT ON;  
DECLARE @out nvarchar(max) = ''
DECLARE @row nvarchar(1024)
DECLARE @first int = 1

DECLARE cur CURSOR FOR 
    SELECT '(' + CONVERT(CHAR(1),[Stage]) + ',''' + [Label] + ''')'
    FROM CV_ORDER_STATUS
    ORDER BY [Stage]

PRINT 'SET IDENTITY_INSERT dbo.CV_ORDER_STATUS ON'
PRINT 'GO'

PRINT 'INSERT INTO dbo.CV_ORDER_STATUS ([Stage],[Label]) VALUES';

OPEN cur
FETCH NEXT FROM cur
    INTO @row

WHILE @@FETCH_STATUS = 0
BEGIN
    IF @first = 1
        SET @first = 0
    ELSE
        SET @out = @out + ',' + CHAR(13);

    SET @out = @out + @row

    FETCH NEXT FROM cur into @row
END

CLOSE cur
DEALLOCATE cur

PRINT @out

PRINT 'SET IDENTITY_INSERT dbo.CV_ORDER_STATUS OFF'
PRINT 'GO'

0

Depois de muita pesquisa, foi minha melhor chance:

Se você possui muitos dados e precisa de um script compacto e elegante, tente: Pacote de ferramentas SSMS

Ele gera uma união de todas as instruções de seleção para inserir itens nas tabelas de destino e manipular transações muito bem.

Captura de tela

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.