SQLShack (Português)
Este artigo cobrirá a instrução SQL SELECT INTO, incluindo sintaxe, parâmetros e uso com várias tabelas, grupos de arquivos e uma condição WHERE
Nós regularmente inserimos dados nas tabelas do SQL Server de um aplicativo ou diretamente no SSMS. Podemos inserir dados usando a instrução INSERT INTO. Para fazer isso, já devemos ter uma tabela para inserir dados, pois não podemos criar uma tabela usando Insert na instrução.
Precisamos fazer as seguintes tarefas usando a instrução INSERT INTO.
- Crie uma estrutura de tabela com os tipos de dados apropriados
- Insira dados nela
Mas a boa notícia é que podemos fazer as duas tarefas juntos, elegantemente, usando a instrução SQL SELECT INTO. Ele cria uma estrutura de tabela para as colunas retornadas pela instrução Select.
Suponha que desejamos atualizar muitos registros em uma tabela. Podemos usar a instrução SELECT INTO para criar uma tabela de backup com a estrutura existente da tabela de origem. Vamos explorar SELECT INTO neste artigo.
Sintaxe da instrução SELECT INTO
1
2
3
4
|
SELECIONE coluna1, coluna2 .. .ColumnN
INTO Nova_tabela
tabelas FROM
;
|
Parâmetros na instrução SELECT INTO
- Lista de colunas: precisamos especificar a coluna que queremos recuperar e inserir em uma nova tabela
- Nova_tabela: podemos especificar o novo nome da tabela aqui. O SQL Server cria uma nova tabela com colunas mencionadas na lista de colunas. Não podemos substituir uma tabela existente usando isso. O nome da tabela deve ser único
- Tabelas: contém uma tabela de onde queremos obter os registros. Podemos ter várias tabelas definidas aqui também com a cláusula Join adequada
- Condições WHERE: podemos filtrar os registros usando a cláusula Where. É uma cláusula opcional
Vamos explorar a instrução SQL SELECT INTO usando exemplos.
Ambiente:
Neste exemplo, estamos usando banco de dados de amostra AdventureWorks2017. Suponha que desejamos selecionar registros da tabela e criar uma nova tabela usando a instrução SELECT INTO. Queremos colunas selecionadas apenas na nova tabela. Vamos executar uma instrução select na tabela Employee com as colunas que queremos.
Antes de executarmos o SQL SELECT INTO declaração, podemos verificar se a tabela Employee_Demo não existe no banco de dados AdventureWorks2017 usando o comando sp_help.
1
|
sp_help “..”
|
Na captura de tela a seguir, podemos ver que a tabela Employee_Demo não existe em meu banco de dados.
Execute a consulta a seguir para criar uma nova tabela usando a instrução SELECT INTO.
Obtemos a seguinte mensagem de saída no Azure Data Studio. Você pode observar que o número de linhas afetadas é 10. Na consulta, selecionamos os 10 principais registros de uma tabela de funcionários.
Podemos acessar os dados da tabela recém-criada Employee_Demo e verificar se ela contém os mesmos registros de nossa instrução select anterior.
Não especificamos nenhuma propriedade da coluna na instrução SQL SELECT INTO. Vamos comparar as colunas da tabela de origem e de destino e suas propriedades.
Podemos executar o comando sp_help ‘tablename’ nas tabelas Employee e Employee_Demo. Copiei a saída de ambas as tabelas no excel (para colunas selecionadas). Na captura de tela a seguir, você pode ver que o tipo de dados da coluna e suas propriedades são semelhantes.
Na instrução SQL SELECT INTO anterior , preparamos uma tabela de destino (Employee_Demo) de algumas colunas na tabela de origem (Employee).
Vamos criar outra tabela com todas as colunas em uma tabela Employee com a seguinte consulta.
Na saída, podemos ver que ele inseriu 290 linhas na tabela Employee_All.
Verificamos que SELECT INTO instrução cria uma nova tabela com colunas especificadas na lista de colunas. Ele também cria um tipo de dados semelhante na tabela de destino.
Suponha que tenhamos chaves primárias e externas na tabela de origem. Ele cria uma chave primária e uma chave estrangeira semelhantes à tabela de origem? Não, a instrução SQL SELECT INTO não cria nenhuma chave na tabela de destino. Se quisermos, podemos definir chaves na tabela de destino. Vamos verificar isso na seção seguinte.
Em meu exemplo anterior, a tabela Employee contém as chaves primária e estrangeira definidas nela. Podemos obter uma lista das chaves existentes usando a visão INFORMATION_SCHEMA. Execute o código a seguir e ele retorna as chaves primárias e estrangeiras existentes na tabela Employee.
Podemos ver, a tabela Employee contém chaves primárias e estrangeiras.
Copiamos todas as colunas na tabela Employee_All da tabela Employee. Precisamos verificar a chave primária e estrangeira na tabela de destino agora.
Podemos ver que ela não contém nenhuma chave na tabela de destino. Isso nos dá flexibilidade para definir chaves na tabela de destino.
SQL SELECT INTO – Inserir dados de várias tabelas
Nos exemplos anteriores, criamos uma tabela usando a instrução SELECT INTO de uma única tabela Employee. Também podemos juntar várias tabelas e usar a instrução SELECT INTO para criar uma nova tabela com dados também. Nesta seção, queremos juntar várias tabelas. Na consulta a seguir, juntamos as tabelas a seguir no AdventureWorks2017.
Execute a consulta a seguir. Ele fornece resultados de várias tabelas com base na condição de junção e nas colunas mencionadas.
Execute uma consulta e obteremos o resultado da instrução SQL SELECT INTO.
Queremos criar uma tabela com os dados retornados usando a tabela acima. Vamos executar a instrução SQL SELECT INTO.
Ela cria. tabela e inserir dados nela. Podemos verificar os registros nesta tabela pela instrução select.
Podemos ver que você pode juntar várias tabelas e criar a saída tabela usando a instrução SELECT INTO.
Não precisamos nos preocupar em definir os tipos de dados para a tabela de destino. Se quisermos criar uma tabela manualmente, precisamos examinar o tipo de dados de cada coluna e definir o tipo de dados de acordo. Se houver uma incompatibilidade entre os tipos de dados, você poderá obter uma mensagem de erro como a seguinte.
Erro 1: devido a uma incompatibilidade nos tipos de dados
Msg 245, Nível 16, Estado 1 , Linha 1
A conversão falhou ao converter o valor varchar GG para o tipo de dados int.
Erro 2: Mensagem 8152, Nível 16, Estado 30, Linha 2
String ou os dados binários seriam truncados.
Não recebemos esses erros ao inserir dados usando a instrução SQL SELECT INTO. No entanto, não podemos inserir dados em tabelas existentes usando este método.
SELECT INTO – Especificar grupo de arquivos
Nas seções anteriores, exploramos que podemos criar uma nova tabela e inserir dados nela usando a instrução SQL SELECT INTO de tabelas existentes. Ele cria uma tabela apenas no grupo de arquivos padrão. Não podemos especificar um determinado grupo de arquivos até o SQL Server 2016. No SQL Server 2017, podemos especificar um determinado grupo de arquivos no qual uma nova tabela deve ser criada. O SQL Server cria uma nova tabela nesse grupo de arquivos específico da tabela Verificar. Se não especificarmos nenhum grupo de arquivos no SQL Server 2017 e superior, ele criará uma tabela no grupo de arquivos padrão.
Observação: não podemos especificar grupos de arquivos no SQL SELECT INTO para SQL Server 2016 e anterior.
Vamos adicionar um novo grupo de arquivos no banco de dados AdventureWorks2017. Clique com o botão direito no banco de dados e vá para grupos de arquivos.
Nesta página Grupo de arquivos, clique em Adicionar grupo de arquivos e especifique um nome para o grupo de arquivos.
Agora, clique em Arquivos e ele lista os arquivos de banco de dados existentes (dados e arquivo de log), nesta página, adicione um novo arquivo de dados e especifique o Grupo de arquivos na lista suspensa. Deve ser o grupo de arquivos que acabamos de criar.
Queremos criar uma tabela SQL no grupo de arquivos INSERTFILE. Não definimos este grupo de arquivos como grupo de arquivos padrão.
Na consulta a seguir, você pode ver que especificamos o nome do grupo de arquivos usando a cláusula ON. Funciona de forma semelhante a uma instrução SQL SELECT INTO regular com uma diferença em um grupo de arquivos.
1
2
3
|
selecione * em person.person_temp
ON INSERTFILE –FILEGROUP NOME
de pessoa.Pessoa
|
Depois que a tabela for criada, execute um comando sp_help nesta tabela recém-criada. Na captura de tela a seguir, podemos verificar que a tabela está localizada no grupo de arquivos INSERTFILE. É o grupo de arquivos que criamos anteriormente.
Também podemos verificar isso nas propriedades da tabela. Clique com o botão direito em uma tabela no SSMS. Na seção Armazenamento, podemos ver o Grupo de arquivos desejado.
SELECIONE INTO com uma condição Onde
Suponha que desejamos criar uma tabela com uma instrução SQL SELECT INTO com poucos registros. Podemos usar uma cláusula Where semelhante a uma instrução select.Na consulta a seguir, queremos criar uma tabela person.person_WC para a pessoa com sobrenome como% Duf%.
1
2
3
4
|
selecione * into person.person_WC
ON INSERTFILE – Verifique o grupo de arquivos da tabela
de person.person
onde Lastname like “% Duf%”
/ div> |
Conclusão
Neste artigo, exploramos o SQL Instrução SELECT INTO e seus cenários de uso. É um comando útil para criar uma cópia de uma tabela sem especificar os tipos de dados.
- Autor
- Postagens recentes
Ele é o criador de uma das maiores coleções online gratuitas de artigos sobre um único tópico, com sua série de 50 partes sobre Grupos de Disponibilidade AlwaysOn do SQL Server. Com base em sua contribuição para a comunidade do SQL Server, ele foi reconhecido com vários prêmios, incluindo o prestigioso “Melhor autor do ano” continuamente em 2020 e 2021 na SQLShack.
Raj está sempre interessado em novos desafios, então se você precisar de consultoria ajuda em qualquer assunto abordado em seus escritos, ele pode ser contatado em [email protected]
Veja todas as postagens de Rajendra Gupta
- Executando atualizações de versões secundárias e principais para AWS RDS SQL Server – 29 de janeiro de 2021
- Implantando instâncias AWS RDS PostgreSQL – 27 de janeiro de 2021
- Migração de seus bancos de dados SQL locais para AWS RDS SQL Server usando AWS DMS – 25 de janeiro , 2021