Agregar filas mediante INSERT y SELECT

Puede usar las instrucciones INSERT y SELECT para agregar filas a una tabla de las siguientes maneras:

  • Utilice la instrucción INSERT para especificar valores directamente o desde una subconsulta.

  • Utilice la instrucción SELECT con la cláusula INTO.

Utilizar INSERT

La instrucción INSERT agrega una o más filas nuevas a una tabla. Tratada de forma simplificada, INSERT tiene el siguiente formato:

INSERT [INTO] table_or_view [(column_list)] data_values

La instrucción INSERT inserta data_values como una o más filas en la tabla o vista especificada. column_list es una lista separada por comas de los nombres de columnas que se pueden utilizar para especificar las columnas para las que se suministran datos. Si no se especifica column_list, todas las columnas de la tabla o vista reciben datos.

Cuando column_list no especifica todas las columnas de la tabla o vista, se inserta el valor predeterminado, si se ha definido alguno para la columna, o un valor de NULL en aquellas columnas que no se hayan especificado en la lista. Todas las columnas no especificadas en la lista de columnas deben permitir valores NULL o tener asignado un valor predeterminado.

Las instrucciones INSERT no especifican valores para los siguientes tipos de columnas porque SQL Server Database Engine (Motor de base de datos de SQL Server) genera los valores de las siguientes columnas:

  • Columnas con una propiedad IDENTITY que genera los valores para la columna.

  • Columnas que tengan un valor predeterminado que utilice la función NEWID para generar un valor GUID exclusivo.

  • Columnas calculadas.

    Las columnas calculadas son columnas virtuales definidas como una expresión calculada a partir de una o varias columnas en la instrucción CREATE TABLE, como:

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

En el siguiente ejemplo se muestra cómo insertar filas en una tabla con columnas que generan automáticamente un valor o tienen un valor predeterminado. La instrucción INSERT inserta filas que contienen valores para algunas de las columnas, pero no para todas. En la última instrucción INSERT, no se especifica ninguna columna y sólo se insertan los valores predeterminados.

    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

Utilizar INSERT con la cláusula VALUE y una subconsulta SELECT

Los valores de datos suministrados deben coincidir con la lista de columnas. El número de valores de datos debe ser el mismo que el número de columnas y el tipo de datos, precisión y escala de cada valor de datos debe coincidir con los de la columna correspondiente. Puede especificar los valores de datos de la siguiente manera:

  • Mediante una cláusula VALUES para especificar los valores de datos de una fila. Por ejemplo:

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

    Para obtener más información, vea Insertar filas mediante INSERT y VALUES.

  • Mediante una subconsulta SELECT para especificar los valores de datos para una o más filas, por ejemplo:

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

    Para obtener más información, vea Insertar filas mediante subconsultas INSERT y SELECT.

Utilizar SELECT con INTO

Para crear una tabla a partir de los valores de otra, puede usar SELECT INTO. Por ejemplo:

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

Para obtener más información, vea Insertar filas mediante SELECT INTO.