Convertendo resultados de seleção em script de inserção - SQL Server [fechado]


106

Sim SQL Server 2008, SQL Server Management Studio.

Preciso selecionar dados Table1no banco de dados1. Então tenho que editar alguns valores nos resultados e insert values into Table1no banco de dados2.

Ou deixe-me colocar de outra forma.

Como posso converter os dados de uma tabela em insert script.


Os bancos de dados estão no mesmo servidor? Nesse caso, você pode inserir de um no outro. Insira em database2.dbo.myTable dados selecionados de database1.dbo.anOtherTable
u07ch

Sim, os dois bancos de dados estão no mesmo servidor. Mas eu preciso de um script. Vou dar esses scripts para o nosso cara do banco de dados.
Captain Comic

Isso ajudaria a esclarecer a questão. Alguma abordagem funcionará ou você precisa de um script de inserção para entregar ao seu dba?
greg

Respostas:


31

O SSMS Toolpack (que é GRATUITO como na cerveja) possui uma variedade de excelentes recursos - incluindo a geração de instruções INSERT a partir de tabelas.

Atualização: para SQL Server Management Studio 2012 (e mais recente), o SSMS Toolpack não é mais gratuito, mas requer uma taxa de licenciamento modesta.


+1 @marc_s Eu trabalhei muito gerando esses scripts de inserção dessingindo scripts do gerador T-SQL e agora você me disse que existe uma ferramenta.
bernd_k

Tenha cuidado quando as tabelas armazenam dados monetários . Esses tipos de dados podem armazenar mais casas decimais do que normalmente são exibidos ou nos scripts gerados pelo SSMS Toolpack
bernd_k

13
Isso não é mais gratuito. ssmstoolspack.com/Licensing
greg

@Greg: obrigado por apontar isso. Observação: esse licenciamento se aplica apenas ao SQL Server Management Studio 2012 e mais recente - para versões anteriores, o pacote de ferramentas ainda é gratuito.
marc_s

4
Alternativa para SSMS Toolpack ?
Kiquenet

154

Aqui está outro método, que pode ser mais fácil do que instalar plug-ins ou ferramentas externas em algumas situações:

  • Faça um .select [whatever you need]INTO temp.table_namefrom [... etc ...]
  • Clique com o botão direito do mouse no banco de dados no Object Explorer => Tasks => Generate Scripts
  • Selecione temp.table_namena tela "Escolher objetos" e clique em Avançar.
  • Na tela "Especificar como os scripts devem ser salvos":
    • Clique em Avançado, encontre a propriedade "Tipos de dados para Script", selecione "Somente dados", feche as propriedades avançadas.
    • Selecione "Salvar em uma nova janela de consulta" (a menos que você tenha milhares de registros).
  • Clique em Avançar, aguarde a conclusão do trabalho e observe as INSERTinstruções resultantes aparecem em uma nova janela de consulta.
  • Use Localizar e Substituir para alterar tudo [temp.table_name]para [your_table_name].
  • drop table [temp.table_name].

Usar INTO temp.table1 gera o seguinte erro: O nome do esquema especificado "temp" não existe ou você não tem permissão para usá-lo. Estou usando o SQL 2012.
Marque em

3
tempaqui se refere a qualquer esquema ao qual você tem acesso. Você pode criar um ( create schema temp) e removê-lo quando terminar, ou (melhor) simplesmente usar qualquer esquema em que esteja trabalhando no momento.
KT.

1
Obrigado por isso, eu sabia que deve haver uma maneira! A propósito, você pode pular a criação da tabela temporária se precisar apenas de todos os dados da tabela que deseja criar o script.
FAB

Tive que usar isso para importar dados para um Banco de Dados do Azure. Importe-o para um banco de dados não azure e extraia como inserções SQL.
m12lrpv

2
Ainda me surpreende que o SSMS não tenha adicionado esta capacidade de 'visualizar saída como inserir script' nos conjuntos de resultados .. mas a abordagem acima funciona, embora crie comandos de inserção individuais em vez de fazer uma inserção em massa adequada (digamos, 1.000 itens por inserção ) como deveria. Isso pode levar uma eternidade para ser executado em conjuntos de resultados realmente grandes
Traderhut Games

60

Em SSMS:

  • Clique com o botão direito no banco de dados> Tarefas> Gerar Scripts

  • Próximo

  • Selecione "Selecionar objetos de banco de dados específicos" e marque a tabela que deseja criar em script, Avançar

  • Clique Advanced >na lista de opções, role para baixo e procure "Tipos de dados para script" e mude para "Somente dados"> OK

  • Selecione "Salvar em uma nova janela de consulta"> Avançar> Avançar> Concluir

Todas as 180 linhas agora escritas como 180 instruções de inserção!


12
Útil para poucas linhas. Não é útil : se uma tabela tiver 20.000 linhas e eu quiser apenas 20 inserções para 20 linhas.
Kiquenet

2
@Kiquenet - Você pode primeiro criar uma Visualização que seleciona as 20 linhas desejadas e, em seguida, seguir estas etapas para criar os scripts de inserção com base na Visualização. Você poderia então fazer uma localização e substituição em massa para alterar o nome da Visualização de volta para qualquer nome de Tabela que você precisa inserir.
mês de

@tember Não funciona em View como você diz, mas FUNCIONA no Visual Studio: primeiro você cria uma visão com a seleção necessária no sql studio, depois abre o Visual Studio, conecta-se ao sql server e gera um script nessa visão criada.
Sergii

Obrigado por essa informação. Embora largar a mesa inteira seja um exagero, isso resolveu meu problema.
paulz

Salva-vidas. Tenho escrito roteiros durante toda a minha vida.
Jay

38

Método nativo :

por exemplo se você tem mesa

Users(Id, name)

Você consegue fazer isso:

select 'insert into Table values(Id=' + Id + ', name=' + name + ')' from Users

Você pode fazer isso dessa forma, mas se você tiver mais do que algumas tabelas, será necessário digitar um pouco. Existem sps escritos e localizáveis ​​no google que fazem isso para você ou, se você tiver o VS2012, poderá solicitar que o VS faça isso por você. Veja minha resposta abaixo.
Greg

1
Útil para tabelas com poucos campos. Se uma tabela tiver 50, 60, 100 colunas não são úteis. Código SQL de
Kiquenet

23

1- Explicação dos Scripts

A) A sintaxe para inserir dados na tabela é a seguinte

Insert into table(col1,col2,col3,col4,col5)    

             -- To achieve this part i    
             --have used below variable
                ------@CSV_COLUMN-------

values(Col1 data in quote, Col2..quote,..Col5..quote)

-- To achieve this part 
-- i.e column data in 
--quote i have used 
--below variable
----@QUOTED_DATA---

C) Para obter os dados acima da tabela existente, temos que escrever a consulta de seleção de forma que a saída seja na forma de scripts acima

D) Então, finalmente, concatenou a variável acima para criar o script final que irá gerar o script de inserção na execução

E)

@TEXT='SELECT ''INSERT INTO
 '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER_CONDITION

F) E finalmente executei a consulta acima EXECUTE(TEXT)

G) QUOTENAME()função é usada para envolver os dados da coluna dentro da citação

H) ISNULLé usado porque se alguma linha tiver NULL dados para qualquer coluna a consulta falha e retorna NULLé por isso que para evitar que eu useiISNULL

I) E criei o sp sp_generate_insertscripts para o mesmo

1- Basta colocar o nome da mesa que deseja insert script

2- Condição de filtro se você quiser resultados específicos

----------Final Procedure To generate Script------

CREATE PROCEDURE sp_generate_insertscripts
(
    @TABLE_NAME VARCHAR(MAX),
    @FILTER_CONDITION VARCHAR(MAX)=''
)
AS
BEGIN

SET NOCOUNT ON

DECLARE @CSV_COLUMN VARCHAR(MAX),
        @QUOTED_DATA VARCHAR(MAX),
        @TEXT VARCHAR(MAX)

SELECT @CSV_COLUMN=STUFF
(
    (
     SELECT ',['+ NAME +']' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @QUOTED_DATA=STUFF
(
    (
     SELECT ' ISNULL(QUOTENAME('+NAME+','+QUOTENAME('''','''''')+'),'+'''NULL'''+')+'','''+'+' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @TEXT='SELECT ''INSERT INTO '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER_CONDITION

--SELECT @CSV_COLUMN AS CSV_COLUMN,@QUOTED_DATA AS QUOTED_DATA,@TEXT TEXT

EXECUTE (@TEXT)

SET NOCOUNT OFF

END

Você fez um trabalho incrível ...
DineshDB

14

É possível fazer através do Visual Studio SQL Server Object Explorer.

Você pode clicar em "Exibir dados" no menu de contexto para a tabela necessária, filtrar os resultados e salvar o resultado como script.


1
Sua postagem é a maneira correta e mais fácil usando o SQL Server Data Tools no Visual Studio, aqui e aqui está uma postagem que explica como gerar instrução de inserção para as primeiras 1000 linhas espero que ajude.
shaijut de

8

Usando o Visual Studio, faça o seguinte

Crie um projeto do tipo SQL Server -> Projeto de Banco de Dados SQL Server

abra o sql server explorer CTL- \, CTL-S

adicione um SQL Server clicando com o botão direito do mouse no ícone SQL SERVER. Selcet ADICIONE NOVO SERVIDOR

navegue até a tabela na qual você está interessado

clique com o botão direito -> VER DADOS

Clique na célula superior esquerda para destacar tudo (ctl-A não parece funcionar)

Clique com o botão direito -> SCript

Isso é fabuloso. Eu tentei tudo listado acima ao longo dos anos. Sei que existe uma ferramenta que fará isso e muito mais, não consigo pensar no nome dela. Mas é muito caro.

Boa sorte. Eu apenas descobri isso. Não testei extensivamente com campos de texto, etc, mas parece que ele o leva a um longo caminho.

Greg


1
Isso não converte os resultados selecionados, simplesmente faz o script da tabela.
Eric K de

@QuantumDynamix - a pergunta original é esclarecida na parte inferior por 'Como posso converter os dados de uma tabela em um script.' Abaixo está um exemplo da minha abordagem. É exatamente o que o usuário perguntou. Na verdade, é a única solução que vejo que realmente produz um script de inserções, como o usuário pede. Por que o downvote? O que significa 'não converte resultados selecionados'? SET IDENTITY_INSERT [PMDB]. [BUAttr] ON INSERT INTO [PMDB]. [BUAttr] ([id], [BU], [Nome], [Valor]) VALORES (1, N'ALASKA ', N'GeoCenter Lat' , N'67.07213 ')
greg

isso junto com a criação das tabelas temporárias, fez por mim
harishr

4

Crie uma tabela separada usando a instrução into Por exemplo

Selecione * em Test_123 de [dbo]. [Funcionário] onde Nome como '% Teste%'

Vá para o Banco de Dados Clique com o botão direito do mouse no Banco de Dados Clique em Gerar Script Selecione sua tabela Selecione a opção Advanace e selecione o Atributo "Somente Dados" Selecione o arquivo "abrir em nova consulta"

Sql irá gerar script para você


3

Você pode escolher a opção 'Resultado para Arquivo' no SSMS e exportar o resultado selecionado para o arquivo e fazer suas alterações no arquivo de resultado e, finalmente, usando BCP - Cópia em massa, você pode inserir na tabela 1 do banco de dados 2.

Acho que para a inserção em massa, você deve converter o arquivo .rpt em arquivo .csv

Espero que ajude.


2

Tive um problema semelhante, mas precisava ser capaz de criar uma instrução INSERT a partir de uma consulta (com filtros etc.)

Então criei o seguinte procedimento:

CREATE PROCEDURE dbo.ConvertQueryToInsert (@input NVARCHAR(max), @target NVARCHAR(max)) AS BEGIN

    DECLARE @fields NVARCHAR(max);
    DECLARE @select NVARCHAR(max);

    -- Get the defintion from sys.columns and assemble a string with the fields/transformations for the dynamic query
    SELECT
        @fields = COALESCE(@fields + ', ', '') + '[' + name +']', 
        @select = COALESCE(@select + ', ', '') + ''''''' + ISNULL(CAST([' + name + '] AS NVARCHAR(max)), ''NULL'')+'''''''
    FROM tempdb.sys.columns 
    WHERE [object_id] = OBJECT_ID(N'tempdb..'+@input);

    -- Run the a dynamic query with the fields from @select into a new temp table
    CREATE TABLE #ConvertQueryToInsertTemp (strings nvarchar(max))
    DECLARE @stmt NVARCHAR(max) = 'INSERT INTO #ConvertQueryToInsertTemp SELECT '''+ @select + ''' AS [strings] FROM '+@input
    exec sp_executesql @stmt

    -- Output the final insert statement 
    SELECT 'INSERT INTO ' + @target + ' (' + @fields + ') VALUES (' + REPLACE(strings, '''NULL''', 'NULL') +')' FROM #ConvertQueryToInsertTemp

    -- Clean up temp tables
    DROP TABLE #ConvertQueryToInsertTemp
    SET @stmt = 'DROP TABLE ' + @input
    exec sp_executesql @stmt
END

Você pode então usá-lo gravando a saída da sua consulta em uma tabela temporária e executando o procedimento:

-- Example table
CREATE TABLE Dummy (Id INT, Comment NVARCHAR(50), TimeStamp DATETIME)
INSERT INTO Dummy VALUES (1 , 'Foo', GetDate()), (2, 'Bar', GetDate()), (3, 'Foo Bar', GetDate())

-- Run query and procedure
SELECT * INTO #TempTableForConvert FROM Dummy WHERE Id < 3
EXEC dbo.ConvertQueryToInsert '#TempTableForConvert', 'dbo.Dummy'

Nota: Este procedimento apenas converte os valores em uma string, o que pode fazer com que os dados pareçam um pouco diferentes. Com DATETIME, por exemplo, os segundos serão perdidos.


2

Esta é uma solução mais versátil (que pode fazer um pouco mais do que a pergunta pede) e pode ser usada em uma janela de consulta sem ter que criar um novo procedimento armazenado - útil em bancos de dados de produção, por exemplo, onde você não tem acesso de gravação .

Para usar o código, modifique de acordo com os comentários em linha que explicam seu uso. Você pode então simplesmente executar esta consulta em uma janela de consulta e ela imprimirá as instruções INSERT de que você precisa.

SET NOCOUNT ON

-- Set the ID you wish to filter on here
DECLARE @id AS INT = 123

DECLARE @tables TABLE (Name NVARCHAR(128), IdField NVARCHAR(128), IdInsert BIT, Excluded NVARCHAR(128))

-- Add any tables you wish to generate INSERT statements for here. The fields are as thus:
 -- Name: Your table name
 -- IdField: The field on which to filter the dataset
 -- IdInsert: If the primary key field is to be included in the INSERT statement
 -- Excluded: Any fields you do not wish to include in the INSERT statement
INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable1', 'Id', 0, 'Created,Modified')
INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable2', 'Id', 1, 'Created,Modified')

DECLARE @numberTypes TABLE (sysId TINYINT)

-- This will ensure INT and BIT types are not surrounded with quotes in the
-- resultant INSERT statement, but you may need to add more (from sys.types)
INSERT @numberTypes(SysId) VALUES(56),(104)

DECLARE @rows INT = (SELECT COUNT(*) FROM @tables)
DECLARE @cnt INT = 1

DECLARE @results TABLE (Sql NVARCHAR(4000))

WHILE @cnt <= @rows
BEGIN
    DECLARE @tablename AS NVARCHAR(128)
    DECLARE @idField AS NVARCHAR(128)
    DECLARE @idInsert AS BIT
    DECLARE @excluded AS NVARCHAR(128)
    SELECT
        @tablename = Name,
        @idField = IdField,
        @idInsert = IdInsert,
        @excluded = Excluded
    FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RowId FROM @tables) t WHERE t.RowId = @cnt

    DECLARE @excludedFields TABLE (FieldName NVARCHAR(128))
    DECLARE @xml AS XML = CAST(('<X>' + REPLACE(@excluded, ',', '</X><X>') + '</X>') AS XML)
    INSERT INTO @excludedFields SELECT N.value('.', 'NVARCHAR(128)') FROM @xml.nodes('X') AS T(N)

    DECLARE @setIdentity NVARCHAR(128) = 'SET IDENTITY_INSERT ' + @tablename

    DECLARE @execsql AS NVARCHAR(4000) = 'SELECT ''' + CASE WHEN @idInsert = 1 THEN @setIdentity + ' ON' + CHAR(13) ELSE '' END + 'INSERT INTO ' + @tablename + ' ('
    SELECT @execsql = @execsql +
    STUFF
    (
        (
            SELECT CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN ', ' + name ELSE '' END
            FROM sys.columns
            WHERE object_id = OBJECT_ID('dbo.' + @tablename)
            FOR XML PATH('')
        ), 1, 2, ''
    ) +
    ')' + CHAR(13) + 'VALUES (' +
    STUFF
    (
        (
            SELECT
                CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN
                    ''', '' + ISNULL(' +
                    CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ''''''''' + ' END +
                    'CAST(' + name + ' AS VARCHAR)' +
                    CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ' + ''''''''' END +
                    ', ''NULL'') + '
                ELSE ''
                END
            FROM sys.columns
            WHERE object_id = OBJECT_ID('dbo.' + @tablename)
            FOR XML PATH('')
        ), 1, 3, ''
    ) +
    ''')' + CASE WHEN @idInsert = 1 THEN CHAR(13) + @setIdentity + ' OFF' ELSE '' END +
    ''' FROM ' + @tablename + ' WHERE ' + @idField + ' = ' + CAST(@id AS VARCHAR)

    INSERT @results EXEC (@execsql)
    DELETE @excludedFields
    SET @cnt = @cnt + 1
END

DECLARE cur CURSOR FOR SELECT Sql FROM @results
OPEN cur

DECLARE @sql NVARCHAR(4000)
FETCH NEXT FROM cur INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @sql
    FETCH NEXT FROM cur INTO @sql
END

CLOSE cur
DEALLOCATE cur



1

Eu criei o seguinte procedure:

if object_id('tool.create_insert', 'P') is null
begin
  exec('create procedure tool.create_insert as');
end;
go

alter procedure tool.create_insert(@schema    varchar(200) = 'dbo',
                                   @table     varchar(200),
                                   @where     varchar(max) = null,
                                   @top       int = null,
                                   @insert    varchar(max) output)
as
begin
  declare @insert_fields varchar(max),
          @select        varchar(max),
          @error         varchar(500),
          @query         varchar(max);

  declare @values table(description varchar(max));

  set nocount on;

  -- Get columns
  select @insert_fields = isnull(@insert_fields + ', ', '') + c.name,
         @select = case type_name(c.system_type_id)
                      when 'varchar' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + cast(' + c.name + ' as varchar) + '''''''', ''null'')'
                      when 'datetime' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + convert(varchar, ' + c.name + ', 121) + '''''''', ''null'')'
                      else isnull(@select + ' + '', '' + ', '') + 'isnull(cast(' + c.name + ' as varchar), ''null'')'
                    end
    from sys.columns c with(nolock)
         inner join sys.tables t with(nolock) on t.object_id = c.object_id
         inner join sys.schemas s with(nolock) on s.schema_id = t.schema_id
   where s.name = @schema
     and t.name = @table;

  -- If there's no columns...
  if @insert_fields is null or @select is null
  begin
    set @error = 'There''s no ' + @schema + '.' + @table + ' inside the target database.';
    raiserror(@error, 16, 1);
    return;
  end;

  set @insert_fields = 'insert into ' + @schema + '.' + @table + '(' + @insert_fields + ')';

  if isnull(@where, '') <> '' and charindex('where', ltrim(rtrim(@where))) < 1
  begin
    set @where = 'where ' + @where;
  end
  else
  begin
    set @where = '';
  end;

  set @query = 'select ' + isnull('top(' + cast(@top as varchar) + ')', '') + @select + ' from ' + @schema + '.' + @table + ' with (nolock) ' + @where;

  insert into @values(description)
  exec(@query);

  set @insert = isnull(@insert + char(10), '') + '--' + upper(@schema + '.' + @table);

  select @insert = @insert + char(10) + @insert_fields + char(10) + 'values(' + v.description + ');' + char(10) + 'go' + char(10)
    from @values v
   where isnull(v.description, '') <> '';
end;
go

Então você pode usá-lo dessa forma:

declare @insert varchar(max),
        @part   varchar(max),
        @start  int,
        @end    int;

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'customer',
                        @where  = 'id = 1',
                        @insert = @insert output;

-- Print one line to avoid the maximum 8000 characters problem
while len(@insert) > 0
begin
  set @end = charindex(char(10), @insert);

  if @end = 0
  begin
    set @end = len(@insert) + 1;
  end;

  print substring(@insert, @start, @end - 1);
  set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
end;

A saída seria algo assim:

--DBO.CUSTOMER
insert into dbo.customer(id, name, type)
values(1, 'CUSTOMER NAME', 'F');
go

Se você deseja apenas obter um intervalo de linhas, use o @topparâmetro abaixo:

declare @insert varchar(max),
        @part   varchar(max),
        @start  int,
        @end    int;

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'customer',
                        @top    = 100,
                        @insert = @insert output;

-- Print one line to avoid the maximum 8000 characters problem
while len(@insert) > 0
begin
  set @end = charindex(char(10), @insert);

  if @end = 0
  begin
    set @end = len(@insert) + 1;
  end;

  print substring(@insert, @start, @end - 1);
  set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
end;

Isso ajuda, mas truncou este campo "6C2A94737A456C405FDCF793DFA6E661: BqRc / DpUIe27" para apenas "6C2A94737A456C405FDCF793DFA6E6"
Adam Mendoza

0

Se você estiver usando o Oracle (ou configurar o aplicativo para o SQL Server), o Oracle SQL Developer faz isso para você. escolha 'descarregar' para uma tabela e siga as opções (desmarque DDL se você não quiser que toda a tabela seja criada).


1
Isso está claramente marcado como uma pergunta do SQL Server ...
BentOnCoding

Também é possível usar o oracle sql developer com sql server. Eu editei minha resposta.
Liam

0

Encontrei este complemento SMSMS Boost , que é gratuito e faz exatamente isso, entre outras coisas. Você pode clicar com o botão direito nos resultados e selecionar Dados do script como.


Eu vejo os dados da grade do Script, mas não
gero

0

Você pode usar este Q2C.SSMSPlugin , que é gratuito e de código aberto. Você pode clicar com o botão direito e selecionar "Execute Query To Command ... -> Query To Insert ...". Aproveitar)


Válido para SSMS 2012?
Kiquenet

-1

Você pode usar uma INSERT INTO SELECTinstrução para inserir os resultados de uma consulta selecionada em uma tabela. http://www.w3schools.com/sql/sql_insert_into_select.asp

Exemplo:

INSERT INTO Customers (CustomerName, Country) SELECT SupplierName, Country FROM Suppliers WHERE Country='Germany';

1
Isso não tem nada a ver com o resultado de uma instrução SELECT convertida em instruções INSERT. Esta é apenas uma instrução INSERT.
Niels Lucas

Não é funcionalmente equivalente?
Protetor um,
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.