domingo, 19 de julio de 2015

Insert Into en SQL Server

Buenas noches lectores, ahora hablaremos de una de las sentencias DML que vimos en el post pasado y es la sentencia Insert, que nos sirve para insertar datos en una tabla de SQL. Pero entremos en materia



Insertar registros con Insert into

La sentencia Insert permite agregar una nueva fila a una tabla o vista de una determinada base de datos.

Consideraciones especiales al ingresar una fila nueva

  • Si desea remplazar la fila registrada, primero debe eliminarla con la sentencia DELETE o TRUNCATE, ya que ocasionaría un error de duplicidad de registro debido al código de la misma
  • Si desea actualizar la fila registrada debe usar la sentencia UPDATE condicionando el campo la clave para una actualización personalizada
  • Para insertar un conjunto de registros a una nueva tabla debe combinar las sentencias SELECT e INTO
  • Cuando la sentencia INSERT es ejecutada y detecta un error aritmético el motor de base de datos SQL muestra un mensaje de error desde la activación SET ARITHABORT ON y detiene el resto del código ejecutado.
  • No es posible registrar subconsultas dentro de una misma implementación de registros de una tabla.
Consideremos que la empresa AEROCHILE desea registrar sus aerolineas dentro de la table AEROLINEA para lo cual se comprobó que la estructura de ambas tablas son idénticas, vale decir que es factible enviar los registros de una tabla a otra.

Para hacer este ejemplo usaremos la base de datos Agencia cuyo script a publiqué en post pasados. Para realizar este ejemplo tenemos dos opciones:

Usando la combinación de comandos INSERT y SELECT:

INSERT INTO AEROLINEA
                SELECT IDCODIGO, LINEA
                FROM AEROCHILE
GO

También podemos usar la sentencia MERGE como se muestra a continuación:

MERGE AEROLINEA AS TARGET
USING AEROCHILE AS SOURCE
ON (TARGET.RUC = SOURCE.IDCODIGO)
WHEN NOT MATCHED THEN
         INSERT VALUES (SOURCE.IDCODIGO, SOURCE.LINEA);
GO

Como se observa se trata de la línea AEROLINEA como destino (TARGET), mientras que AEROCHILE se comporta como la fuente (SOURCE) ya que desde aquí debemos extraer sus registros y enviarlos a la tabla de destino, en la instrucción ON se debe colocar el enlace entre las dos tablas y en la condición se verifica que los registros no hayan sido insertados si todo es correcto, entonces insertarán en el destino desde las columnas fuentes SOURCE.IDCODIGO, SOURCE.LINEA

  • Con respecto a los campos declarados como CHAR o VARCHAR se tiene que considerar que si se registra un valor vacío, el campo CHAR llenará de campos vacíos hasta el límite definido a la columna, mientras que el VARCHAR quitará los espacios finales hasta el último carácter distinto a un espacio.
  • Si no especifica un valor en una columna declarada como VARCHAR o TEXT el motor de base de datos cargará dentro de estas columnas una cadena de longitud cero, tengan en cuenta también las restricciones implementadas a dichos campos
  • Cuando se insertan valores dentro de una tabla y no se especifican las columnas a registrar debes colocar todos los valores obligatorios de la tabla, en caso contrario se podría especificar las columnas involucradas: por ejemplo:
INSERT INTO AEROLINEA VALUES ('10575241587', 'AEROMEXICO');

Insertando la aerolínea AEROMEXICO dentro de la tabla AEROLINEA, se asume que las columnas de la tabla son exactamente dos, en caso contrario generaría un error.

INSERT INTO AEROLINEA (RUC, NOMBRE)
                VALUES('10575241587','AEROMEXICO')

En este caso se especifican las columnas involucradas en la tabla destino.

Sintaxis:
INSERT [INTO]
                [ESQUEMA] TABLA O VISTA[(Lista de columnas)]
                VALUES ('Lista de valores')

Donde:
  • INTO: Es una palabra clave opcional. Normalmente se usa entre el INSERT y la especificación de la tabla destino
  • ESQUEMA: es el nombre del esquema donde se encuentran registradas las tablas o las vistas
  • TABLA O VISTA: Es el nombre de la tabla o vista destino, es decir, la que recibirá los datos. También es posible verificar una variable del tipo TABLE como origen de datos
  • Lista de columnas: esta permite especificar las columnas que tendrán un valor de registro, ésta a su vez define el orden de ingreso de dichos valores
  • VALUES ('Lista de valores'): Aquí se registran los valores según las columnas específicadas en la tabla destino, se pueden registrar valores separados por comas y especificar funciones de acuerdo a la capacidad declarada en la columna como DEFAULT, GETDATE(), etc.
Vamos a ver otros ejemplos de inserción de datos:

INSERT INTO PAIS
VALUES('0001','PERU'),
('0002','ARGENTINA'),
('0003','CHILE'),
('0004','ECUADOR'),
('0005','BRASIL'),
('0006','VENEZUELA'),
('0007','PARAGUAY'),
('0008','URUGUAY'),
('0009','BOLIVIA'),
('0010','MEXICO'),
('0011','HONDURAS'),
('0012','EEUU'),
('0013','PUERTO RICO')

En este ejemplo estamos insertando todos los valores obligatorio de la tabla

INSERT INTO PAIS (PAIS,IDPAIS)
VALUES('PERU','0001'),
('ARGENTINA','0002'),
('CHILE','0003'),
('ECUADOR','0004'),
('BRASIL','0005'),
('VENEZUELA','0006'),
('PARAGUAY','0007'),
('URUGUAY','0008'),
('MEXICO','0010'),
('HONDURAS','0011'),
('EEUU','0012'),
('PUERTO RICO','0013')

En este ejemplo se está insertado con el orden de las columnas personalizadas

INSERT INTO PAIS (PAIS,IDPAIS) VALUES('PERU','0001')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('ARGENTINA','0002')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('CHILE','0003')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('ECUADOR','0004')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('BRASIL','0005')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('VENEZUELA','0006')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('PARAGUAY','0007')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('URUGUAY','0008')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('MEXICO','0010')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('HONDURAS','0011')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('EEUU','0012')
INSERT INTO PAIS (PAIS,IDPAIS) VALUES ('PUERTO RICO','0013')

En este ejemplo estamos insertando datos registro por registro, como pueden ver, hay distintas maneras de insertar datos, dejaré hasta aqui el post, pero próximamente seguiré escribiendo sobre la funcion INSERT, ya que quedan muchas mas funciones que podemos aplicas, espero les haya gustado, que comenten, que compartan, muchas gracias y hasta luego.
Insert Into en SQL Server parte II
                

Banderas de Visitantes

Flag Counter