Adicionando linhas usando INSERT e SELECT

Você pode usar as instruções INSERT e SELECT para adicionar linhas a uma tabela das seguintes formas:

  • Use a instrução INSERT para especificar valores diretamente ou de uma subconsulta.

  • Use a instrução SELECT com a cláusula INTO.

Usando INSERT

A instrução INSERT adicionar uma ou mais linhas novas a uma tabela. Em um tratamento simplificado, INSERT tem a seguinte forma:

INSERT [INTO] table_or_view [(column_list)] data_values

A instrução INSERT insere data_values como uma ou mais linhas na tabela ou exibição especificada. column_list é uma lista de nomes de coluna, separada por vírgulas, que pode ser usada para especificar as colunas onde os dados são fornecidos. Se column_list não for especificada, todas as colunas na tabela ou exibição receberão os dados.

Quando column_list não especifica todas as colunas em uma tabela ou exibição, ou valor padrão, se um padrão estiver definido para a coluna, ou NULL estiver inserido em qualquer coluna que não esteja especificada na lista. Todas as colunas que não são especificadas na lista de colunas devem permitir valores “null" (nulos) ou devem ter um valor padrão atribuído.

Instruções INSERT não especificam valores para os seguintes tipos de colunas porque Mecanismo de banco de dados do SQL Server gera os valores para estas colunas:

  • Colunas com uma propriedade IDENTITY que gera os valores para a coluna.

  • Colunas que têm um padrão que usa a função NEWID para gerar um valor GUID exclusivo.

  • Colunas computadas.

    Colunas computadas são colunas virtuais definidas como uma expressão calculada de uma ou mais outras colunas na instrução CREATE TABLE, como:

    CREATE TABLE TestTable
      (ColA INT PRIMARY KEY,
       ColB INT NOT NULL,
       ColC AS (ColA + ColB) * 2);
    

O exemplo seguinte mostra como inserir linhas em uma tabela que tem colunas que geram automaticamente um valor ou têm um valor padrão. As instruções INSERT inserem linhas que contêm valores para algumas das colunas, mas não todas. Na última instrução INSERT, nenhuma coluna é especificada e somente os valores padrão são inseridos.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1 
(
    column_1 AS 'Computed column ' + column_2, 
    column_2 varchar(30) 
        CONSTRAINT default_name DEFAULT ('my column default'),
    column_3 rowversion,
    column_4 varchar(40) NULL
);
GO
INSERT INTO dbo.T1 (column_4) 
    VALUES ('Explicit value');
INSERT INTO dbo.T1 (column_2, column_4) 
    VALUES ('Explicit value', 'Explicit value');
INSERT INTO dbo.T1 (column_2) 
    VALUES ('Explicit value');
INSERT INTO T1 DEFAULT VALUES; 
GO
SELECT column_1, column_2, column_3, column_4
FROM dbo.T1;
GO

Usando INSERT com a cláusula VALUE e uma subconsulta SELECT

Os valores de dados fornecidos devem corresponder à lista da coluna. O número de valores de dados deve ser o mesmo do número de colunas, e o tipo de dados, precisão e escala de cada valor de dados deve corresponder aos da coluna correspondente. Você pode especificar os valores de dados das seguintes maneiras:

  • Usando uma cláusula VALUES para especificar os valores de dados para uma linha. Por exemplo:

    INSERT INTO MyTable (PriKey, Description)
           VALUES (123, 'A description of part 123.');
    

    Para obter mais informações, consulte Inserindo linhas utilizando INSERT e VALUES.

  • Usando uma subconsulta SELECT para especificar os valores de dados para uma ou mais linhas, como:

    INSERT INTO MyTable  (PriKey, Description)
           SELECT ForeignKey, Description
           FROM SomeView;
    

    Para obter mais informações, consulte Inserindo linhas usando as subconsultas INSERT e SELECT

Usando SELECT com INTO

Para criar uma nova tabela a partir de valores em outra tabela, você pode usar SELECT INTO. Por exemplo:

SELECT LastName, FirstName, Phone
INTO dbo.PhoneList492
FROM dbo.Customers
WHERE Phone LIKE '492%'

Para obter mais informações, consulte Inserindo linhas usando SELECT INTO.