Como desarrollador que trabaja con SQL Server, a menudo te encontrarás con la necesidad de insertar nuevos datos en una tabla. Ya sea como parte de una aplicación transaccional, un proceso ETL o para poblar una tabla de configuración, la instrucción INSERT INTO es una herramienta crucial en tu arsenal de SQL.
La instrucción INSERT INTO te permite insertar una o más filas en una tabla existente. Puedes insertar datos desde otra tabla existente o especificar los valores que deseas insertar. Vamos a explorar cómo funciona esta instrucción con algunos ejemplos.
Creando una tabla de ejemplo
Antes de sumergirnos en la instrucción INSERT INTO, creemos una tabla de ejemplo que utilizaremos a lo largo de este artículo:
CREATE TABLE [HumanResources].[DepartmentTest] (
[DepartmentID] [smallint] NOT NULL,
[Name] varchar(255) NOT NULL,
[GroupName] varchar(255) NULL,
[ModifiedDate] [datetime] NOT NULL,
CONSTRAINT [PK_Department_DepartmentIDTest] PRIMARY KEY CLUSTERED ([DepartmentID] ASC)
)Esta tabla representa un departamento en una empresa, con columnas para el ID del departamento, nombre, nombre del grupo y fecha de modificación.
Sintaxis básica de INSERT INTO
La instrucción INSERT INTO se divide en dos partes principales: la tabla y las columnas en las que estás insertando, y los valores que estás insertando. Aquí está la sintaxis básica:
INSERT INTO <nombre_esquema>.<nombre_tabla> (
<columna_a>,
<columna_b>,
<columna_c>,
<columna_d>
)
VALUES (
"valor_para_columna_a",
"valor_para_columna_b",
"valor_para_columna_c",
"valor_para_columna_d"
)En este ejemplo, estamos insertando una sola fila de datos en la tabla “DepartmentTest”. Los valores proporcionados en la cláusula VALUES corresponden a las columnas de la tabla.
Ejemplo:
INSERT INTO [HumanResources].[DepartmentTest] (
[DepartmentID],
[Name],
[GroupName],
[ModifiedDate]
)
VALUES (
1,
'MSSQL_Dept1',
'MSSQL_Group1',
GETDATE()
)Al ejecutar esta consulta, se insertará una nueva fila con los valores especificados en la tabla “DepartmentTest”.
Especificando columnas en INSERT INTO
Cuando utilizas la instrucción INSERT INTO, tienes la opción de especificar la lista exacta de columnas en las que deseas insertar datos. Alternativamente, puedes elegir insertar datos en todas las columnas. Aquí tienes un par de ejemplos:
Ejemplo 1: Insertar en todas las columnas
INSERT INTO [HumanResources].[DepartmentTest]
VALUES (
2,
'MSSQL_Dept2',
'MSSQL_Group2',
GETDATE()
)En este ejemplo, estamos insertando una nueva fila en la tabla “DepartmentTest” sin especificar los nombres de las columnas. La instrucción INSERT espera un valor para cada columna en la tabla.
Ejemplo 2: Insertar en un subconjunto de columnas
INSERT INTO [HumanResources].[DepartmentTest] (
[DepartmentID],
[Name],
[ModifiedDate]
)
VALUES (
3,
'MSSQL_Dept3',
GETDATE()
)En este ejemplo, estamos insertando una nueva fila en la tabla “DepartmentTest”, pero solo especificando un subconjunto de las columnas. La columna “GroupName” se excluye de la operación de inserción.
Es importante tener en cuenta que si el número de valores especificados en la cláusula VALUES no coincide con el número de columnas en la tabla, se producirá un error. De manera similar, si intentas insertar datos de un tipo incorrecto en una columna, se lanzará un error.
Insertar múltiples filas
La instrucción INSERT INTO también te permite insertar múltiples filas a la vez. Puedes lograr esto separando las filas con comas. Aquí tienes un ejemplo:
INSERT INTO [HumanResources].[DepartmentTest] (
[DepartmentID],
[Name],
[GroupName],
[ModifiedDate]
)
VALUES (
4,
'MSSQL_Dept4',
'MSSQL_Group4',
GETDATE()
),
(
5,
'MSSQL_Dept5',
'MSSQL_Group5',
GETDATE()
),
(
6,
'MSSQL_Dept6',
'MSSQL_Group6',
GETDATE()
)En este ejemplo, estamos insertando tres nuevas filas en la tabla “DepartmentTest”.
Usar variables en INSERT INTO
A veces, es posible que necesites insertar datos de forma dinámica utilizando variables. Esto te permite cambiar los valores que se insertan sin modificar la propia instrucción de inserción. Aquí tienes un ejemplo:
DECLARE @DeptID INT = 7
DECLARE @DeptName VARCHAR(50) = 'Variable Dept'
DECLARE @GroupName VARCHAR(50) = 'Variable Group'
INSERT INTO [HumanResources].[DepartmentTest] (
[DepartmentID],
[Name],
[GroupName],
[ModifiedDate]
)
VALUES (
@DeptID,
@DeptName,
@GroupName,
GETDATE()
)En este ejemplo, estamos insertando una fila de datos utilizando variables declaradas. Los valores de las variables se utilizan en la operación de inserción.
Insertar filas con la instrucción SELECT
A menudo, es posible que necesites insertar datos en una tabla desde otra tabla. Esto se puede lograr utilizando la instrucción INSERT INTO SELECT. Aquí tienes un ejemplo:
INSERT INTO [HumanResources].[DepartmentTest_Replica] (
[DepartmentID],
[Name],
[GroupName],
[ModifiedDate]
)
SELECT
[DepartmentID],
[Name],
[GroupName],
[ModifiedDate]
FROM [HumanResources].[DepartmentTest]En este ejemplo, estamos seleccionando todos los datos de la tabla “DepartmentTest” e insertándolos en la tabla “DepartmentTest_Replica”.
Insertar filas con un UNION
En algunos casos, es posible que tengas dos tablas de origen diferentes con datos similares que deseas insertar en una tercera tabla. La instrucción UNION se puede utilizar para lograr esto. Aquí tienes un ejemplo:
INSERT INTO [HumanResources].[DepartmentTest_Union] (
[DepartmentID],
[Name],
[GroupName],
[ModifiedDate]
)
SELECT
[DepartmentID],
[Name],
[GroupName],
[ModifiedDate]
FROM [HumanResources].[DepartmentTest_Replica]
UNION ALL
SELECT
[DepartmentID],
[Name],
[GroupName],
[ModifiedDate]
FROM [HumanResources].[DepartmentTest]En este ejemplo, estamos insertando datos de la tabla “DepartmentTest_Replica” y la tabla “DepartmentTest” en la tabla “DepartmentTest_Union” utilizando la instrucción UNION.
Insertar filas con una columna IDENTITY
Cuando trabajas con una tabla que tiene una columna IDENTITY, no puedes insertar datos directamente en esa columna. La columna IDENTITY se incrementa automáticamente en función de un punto de inicio y un valor de incremento establecidos. Aquí tienes un ejemplo:
INSERT INTO [HumanResources].[DepartmentTest_Identity] (
[Name],
[GroupName],
[ModifiedDate]
)
VALUES (
'MSSQL_Dept',
'MSSQL_Group',
GETDATE()
)En este ejemplo, estamos insertando una nueva fila en la tabla “DepartmentTest_Identity”. La columna IDENTITY se ignora en la lista de columnas y se incrementará automáticamente en función de la configuración de IDENTITY de la tabla.
Estos son los conceptos básicos de la instrucción INSERT INTO en SQL Server. Al comprender cómo utilizar esta instrucción de manera efectiva, puedes insertar fácilmente nuevos datos en tus tablas y manipular tu base de datos según sea necesario.
Recuerda siempre verificar los nombres de las columnas, los tipos de datos y asegurarte de que el número de valores coincida con el número de columnas en tu tabla para evitar errores.
¡Feliz codificación!