Rajendra Gupta
SQL INSERT INOT SELECT Output of query

INSERTAR EN SELECCIONAR la instrucción del resumen y ejemplos

November 5, 2019 by

En el presente artículo cubriremos la instrucción SQL INSERT INTO SELECT junto con su sintaxis, ejemplos y casos de uso.

En mi artículo anterior SQL SELECT INTO Statement, efectuamos la exploración de las siguientes tareas.

  • Cree una tabla SQL inmediatamente mientras inserta registros con los tipos de datos apropiados
  • Use SQL SELECT INTO para insertar registros en un grupo de archivos particular
  • No podemos usarlo para insertar datos en una tabla existente

La instrucción INSERT INTO SELECT

Queremos insertar como una actividad regular de la base de datos. En esta instancia Podemos insertar datos directamente usando herramientas de cliente como SSMS, Azure Data Studio o directamente desde una aplicación. Por esta razón En SQL, usamos la instrucción SQL INSERT INTO para insertar los mencionados registros.

La sintaxis de INSERT INTO

Una vez que insertemos los datos en la tabla, podremos usar la siguiente sintaxis para nuestra instrucción SQL INSERT INTO.

Si hemos especificado todos los valores de la referida columna según las órdenes de la misma columna de la tabla, entonces no necesitamos especificar nombres de columna. En consecuencia, Podemos insertar registros directamente en la tabla.

Vayamos a crear una tabla de muestra e insertemos datos en ella.

Podemos insertar datos usando las siguientes requerimientos o consultas. Ambas consultas son válidas para la inserción de datos.

Vale la pena mencionar que no podremos insertar datos sin especificar los nombres de las columnas si en el orden de las columnas se hallan diferencias y hay una falta de coincidencia entre la inserción de datos y el orden de los valores de las columnas es diferente. Entonces Podemos obtener el siguiente mensaje de error.

  • Mensaje 213, Nivel 16, Estado 1, Línea 6

    El nombre de la columna o el número de valores proporcionados no coincide con la definición de la tabla.

  • Mensaje 245, Nivel 16, Estado 1, Línea 6

    La conversión falló al convertir el valor varchar ‘raj’ al tipo de datos int.

Es importante indicar que, en este ejemplo, nosotros usaremos la instrucción SQL INSERT INTO con el suministro de valores directamente en el requerimiento o una instrucción. Supongamos que queremos insertar datos de otra tabla. Es importante indicar que todavía podemos usar la instrucción SQL INSERT INTO con una instrucción select. Exploremos esto en la siguiente sección.

INSERTAR EN SELECCIONAR Sintaxis de declaración

Verifique que Podemos insertar datos de otras tablas SQL en una tabla cualquiera con la siguiente instrucción INSERT INTO SELECT.

Esta consulta realiza las siguientes tareas:

  • Primero selecciona registros de una tabla (instrucción Select)
  • A continuación, se inserta en una tabla especificada con INSERT INTO

  • Nota: La estructura de la columna debe coincidir entre la columna devuelta inicialmente por la instrucción SELECT y la tabla de destino final.

INSERTAR EN SELECCIONAR ejemplos

Ejemplo 1: inserte datos de todas las columnas de la tabla de inicial origen a la tabla final de destino

En este caso nosotros tenemos los siguientes registros en una tabla de empleados existente.

INSERT INTO SELECT examples

Para tal fin nosotros crearemos otra tabla Clientes con la siguiente consulta.

Queremos insertar todos los registros de la tabla Empleados en la tabla Clientes. Para tal fin podemos usar la instrucción SQL INSERT INTO SELECT para hacer esto.

Esta instrucción Inserta todos los registros en la tabla Clientes. Por esta razón podemos verificar que los registros en la tabla Clientes sean similares a la tabla Empleados.

sample data

En este ejemplo, insertamos registros para todas las columnas en la tabla Clientes.

Ejemplo 2: inserte filas de la tabla de origen a la de destino especificando nombres de columna

Para este fin nosotros descartaremos la tabla de Clientes existente antes de seguir adelante. Ahora, queremos crear una tabla con una columna IDENTIDAD adicional. En este caso, la columna IDENTIDAD inserta automáticamente valores de identidad en una tabla. Así mismo también agregamos una columna Ciudad que permite obtener los valores NULL.

No podemos usar la instrucción INSERT INTO SELECT en un caso similar al ejemplo anterior. Si intentamos ejecutar este código, recibimos un mensaje de error.


INSERT INTO SELECT examples and errors

En este caso, es importante mencionar que debemos especificar el nombre de la columna con la instrucción INSERT INTO.

En la tabla Clientes podemos observar que tenemos una columna adicional con valores NULL permitidos en el momento en que nosotros ejecutemos select en la tabla clientes. En la siguiente captura de pantalla, podemos ver valores NULOS en la columna Ciudad.

INSERT INTO SELECT examples sample data

Supongamos que usted tiene una columna diferente en la tabla de origen. Pese a ello, usted aún puede insertar registros en la tabla de destino con la especificación de nombres de columna en la instrucción INSERT INTO SELECT. Por esta razón deberíamos tener un tipo de datos apropiado para insertar los mencionados datos. No se puede insertar datos de una columna varchar en una columna INT.

Agregue una nueva columna en la tabla Empleados utilizando la instrucción ALTER TABLE.

Actualice los registros de la tabla con el valor del país India.

Ahora, vuelva a ejecutar la instrucción INSERT INTO SELECT. En este caso usted puede notar que estamos usando SELECT * en lugar de especificar nombres de columna.

Usted puede observar que recibimos el siguiente mensaje de error. Este error se debe fundamentalmente a que existe una falta de coincidencia de la columna entre la tabla de origen y la tabla de destino.

SQL Server INSERT INTO SELECT Error messsage

En consecuencia, nosotros podremos mapear la columna entre la tabla de origen y la de destino usando la siguiente consulta.

Ejemplo 3: inserte las filas superiores con el uso de la instrucción INSERT INTO SELECT

Supongamos que queremos insertar las filas superiores N de la tabla de origen a la tabla de destino. En este caso nosotros podremos usar la cláusula Top en la instrucción INSERT INTO SELECT. En la siguiente consulta, usted debe insertar la fila superior 1 de la tabla Empleados a la tabla Clientes.

Ejemplo 4: Insertar utilizando ambas columnas y los valores definidos en la instrucción SQL INSERT INTO SELECT

Vale la pena mencionar que, en ejemplos anteriores, nosotros habíamos especificado valores precisos en la instrucción INSERT INTO o habíamos utilizado INSERT INTO SELECT para de esta manera obtener registros de la tabla de origen e poder luego insertarlos en la tabla de destino.

Podemos combinar ambas columnas y además sus valores definidos en la instrucción SQL INSERT INTO SELECT.

Podemos observar que tenemos las siguientes columnas en la tabla Clientes y Empleados. Anteriormente, y de forma previa no insertamos ningún valor para la columna Ciudad. Tampoco hemos tenido los valores requeridos en la tabla Empleado. Por esta razón necesitamos especificar un valor explícito para la columna Ciudad.

Tables columns comparison

En la siguiente consulta, especificamos un valor para la columna Ciudad mientras que el resto de los valores deberemos poder insertar de la tabla Empleados.

En la siguiente consulta, podemos ver que se inserta una fila (debido a la cláusula Top (1) junto con el valor de la columna Ciudad.

sample data

Ejemplo 5: instrucción INSERT INTO SELECT con la cláusula Join para obtener datos originados de varias tablas

En este acapice podemos ver que es posible el utilizar una cláusula JOIN para obtener datos de varias tablas. Por esta razón es que Estas tablas se unen con las condiciones especificadas con la cláusula ON. En este caso Supongamos que queremos obtener datos de varias tablas e insertarlas en una tabla.

En este ejemplo, lo que estoy usando es la base de datos AdventureWorks2017. Para este fin Primero, cree una nueva tabla con los tipos de datos apropiados.

Verifique que en esta tabla debe contener registros de la salida de una consulta de la combinación de varias tablas. Entonces usted debe ejecutar la siguiente consulta para insertar datos en la tabla HumanResources.EmployeeData .


SQL INSERT INTO SELECT sample data

Ejemplo 6: instrucción INSERT INTO SELECT con la utilización de la expresión de tabla común

Usted puede verificar que utilizamos una expresión de tabla común (CTE) para simplificar la combinación compleja de varias columnas. Como se puede observar en el ejemplo anterior, nosotros hemos utilizado JOINS en una instrucción Select para poder insertar datos en una tabla SQL. Para tal fin, en esta parte, nosotros reescribiremos la consulta con CTE.

En un CTE, podemos dividir el código en dos partes.

  1. Definimos CTE por una cláusula WITH antes de la instrucción SELECT, INSERT, UPDATE, DELETE
  2. Una vez que nosotros hemos definido CTE, podremos hacer referencia al CTE de manera similar a una tabla SQL relacional

Ejecute el siguiente código para insertar datos utilizando un CTE.

Ejemplo 7: instrucción INSERT INTO SELECT con una variable de tabla

En este caso nosotros utilizamos variables de tabla de manera similar como si fuera a utilizarse una tabla temporal. Nosotros en este caso, podemos precisar usando el tipo de datos de la tabla. Esta tabla se puede usar para realizar actividades en SQL Server donde no necesitamos una tabla permanente. Para tal fin, se puede dividir la siguiente consulta en tres partes.

  1. Usted debe crear una variable de tabla SQL con los tipos de datos de columna adecuados. Para ello, nosotros necesitamos usar el tipo de datos TABLE para la variable de tabla
  2. Usted debe ejecutar una instrucción INSERT INTO SELECT para insertar datos en una variable de tabla
  3. Finalmente, usted deberá ver el conjunto de resultados de la variable de tabla

SQL INSERT INTO SELECT Output of query

Conclusión

En este artículo, nosotros hemos explorado los casos de uso de la instrucción INSERT INTO SELECT. Dicho esto, espero que hayas encontrado útil este artículo. Siéntase libre de proporcionar comentarios en los comentarios a continuación.

Rajendra Gupta

Rajendra Gupta

Rajendra has 8+ years of experience in database administration having a passion for database performance optimization, monitoring, and high availability and disaster recovery technologies, learning new things, new features.

While working as a Senior consultant DBA for big customers and having certified with MCSA SQL 2012, he likes to share knowledge on various blogs.
He can be reached at rajendra.gupta16@gmail.com

View all posts by Rajendra Gupta
Rajendra Gupta
180 Views