2014/12/30

ALGUNOS TIPOS DE INSERT

SQL SERVER es capaz de insertar datos a través de diferentes métodos, algunos de ellos:
  • INSERT VALUES
  • INSERT SELECT
  • INSERT EXEC
  • SELECT INTO

INSERT VALUES
Es posible insertar una fila o varias filas a nuestra tabla destino, la sintaxis:
INSERT INTO tablaDestino( columna1, columna2, columna3, columnaN )
VALUES( valor1 , valor2 , valor3, valorN )
Alguna de sus características:
  • Es posible omitir la lista de columnas después del nombre de la tabla, sin embargo se considera una buena práctica especificarlos.
  • Si la lista es omitida, la lista de columnas después de VALUES debe tener el mismo orden en el que fueron creadas en la tabla, respetando el tipo de dato, longitud entre otras propiedades.
  • Si existe una columna de tipo IDENTITY, esta no debe especificarse en la lista después del nombre de la tabla y por lo tanto en la lista de valores a insertar, si se desea ingresar los valores, antes de realizar la inserción debe especificarse SET IDENTITY_INSERT <nombreTabla> ON y después de realizar la inserción nuevamente SET IDENTITY_INSERT <nombreTabla> OFF. Algo más o menos así:
SET IDENTITY_INSERT dbo.tablaDestino ON; 

INSERT INTO dbo.tablaDestino( columna1, columna2, columna3, columna4 ) 
VALUES( 5 , '1valorColumna2' , '1valorColumna3' , GETDATE() )
, ( 9 , '2valorColumna2' , '2valorColumna3' , GETDATE() ); 

SET IDENTITY_INSERT dbo.tablaDestino OFF;
  • Si alguna columna contiene la restricción DEFAULT, basta con no especificarla en la lista después del nombre de la tabla; por lo contrario, si se especifica y no queremos ingresar ningún valor, en la lista después de VALUES solo es necesario escribir DEFAULT en donde corresponda su valor.
IF OBJECT_ID( 'dbo.tablaDestino' ) IS NOT NULL
 DROP TABLE dbo.tablaDestino 

CREATE TABLE dbo.tablaDestino(
 columna1 INT 
 , columna2 VARCHAR(100) 
 , columna3 VARCHAR(100) DEFAULT 'valorDefault'
 , columna4 DATETIME 
);

-- NO ESPECIFICAMOS EL NOMBRE DE LA COLUMNA
INSERT INTO dbo.tablaDestino( columna1, columna2, columna4 ) 
VALUES( 5 , '1valorColumna2' , GETDATE() );

SELECT * FROM dbo.tablaDestino;

--SI ESPECIFICAMOS EL NOMBRE DE LA COLUMNA, PODEMOS ESCRIBIR DEFAULT
INSERT INTO dbo.tablaDestino( columna1, columna2, columna3, columna4 ) 
VALUES( 9 , '2valorColumna2' , DEFAULT , GETDATE() ); 

SELECT * FROM dbo.tablaDestino;
INSERT SELECT
Inserta los valores que resultan de la ejecución de una consulta.
Características:
  • Es posible omitir la lista de columnas destino al igual que tipo de INSERT anterior.
  • También integra la posibilidad de ingresar valores en una columna IDENTITY si antes se especifica SET IDENTITY <nombreTabla> ON.
Un ejemplo de este tipo es el siguiente:
--ELIMINAMOS LA TABLA SI EXISTE
IF OBJECT_ID( 'dbo.tablaDestino' ) IS NOT NULL
 DROP TABLE dbo.tablaDestino ;

--CREAMOS LA TABLA
CREATE TABLE dbo.tablaDestino(
 columna1 INT
 , columna2 VARCHAR(100) 
 , columna3 VARCHAR(100)
 , columna4 DATETIME 
);

--INSERTAMOS VALORES DESDE UNA CONSULTA
INSERT INTO dbo.tablaDestino
SELECT DepartmentID , Name, GroupName, ModifiedDate
FROM AdventureWorks2012.HumanResources.Department;

--VERIFICAMOS LOS VALORES INSERTADOS
SELECT * FROM dbo.tablaDestino;

INSERT EXEC
Tenemos la posibilidad de ingresar el resultado de la ejecución de un procedimiento almacenado a una tabla, respetando la cantidad de columnas, el tipo de datos y el orden en el que fueron creados en la tabla.
--ELIMINAMOS LA TABLA SI YA EXISTE.
IF OBJECT_ID( 'dbo.tablaDestino' ) IS NOT NULL
 DROP TABLE dbo.tablaDestino 

--CREAMOS LA TABLA
CREATE TABLE dbo.tablaDestino(
 columna1 INT 
 , columna2 VARCHAR(100) 
 , columna3 VARCHAR(100) 
 , columna4 DATETIME 
);

--VERIFICAMOS QUE LA TABLA NO CONTENGA VALORES
SELECT * FROM dbo.tablaDestino; 

--ELIMINAMOS EL PROCEDIMIENTO, SI ES QUE YA EXISTE.
IF OBJECT_ID('dbo.procedimiento', 'P') IS NOT NULL
 DROP PROC dbo.procedimiento;
GO

--CREAMOS EL PROCEDIMIENTO ALMACENADO
CREATE PROC dbo.procedimiento
 @valor AS VARCHAR(50)
AS
 SELECT DepartmentID , Name, GroupName, ModifiedDate
 FROM AdventureWorks2012.HumanResources.Department
 WHERE GroupName = @valor ;
GO

--INSERTAMOS EN LA TABLA UTILIZANDO EXEC
INSERT INTO dbo.tablaDestino
EXEC dbo.procedimiento 'Research and Development'

--VERIFICAMOS LOS DATOS INSERTADOS
SELECT * FROM dbo.tablaDestino;


SELECT INTO
También utiliza una consulta para tomar los valores e insertarlos en una tabla, solo que creará una nueva tabla para este fin, si ya existe la tabla, marcará error.
Algunas de sus características son:
  • Genera una nueva tabla con el nombre especificado.
  • Los datos seleccionados por la consulta son copiados así como los nombres de las columnas, tipo de datos,  si la columna permite o no NULL y la propiedad IDENTITY.
  • Índices, restricciones, disparadores( triggers ), y algunas otros aspectos no son copiados, por lo tanto si se requiere es necesario modificar la tabla y agregarlos.
--ELIMINAMOS LA TABLA SI YA EXISTE.
IF OBJECT_ID( 'dbo.nuevaTablaDestino' ) IS NOT NULL
 DROP TABLE dbo.nuevaTablaDestino 

--CREAMOS LA TABLA
SELECT DepartmentID , Name, GroupName, ModifiedDate
INTO dbo.nuevaTablaDestino
FROM AdventureWorks2012.HumanResources.Department
WHERE GroupName = 'Research and Development' ;
GO

--VERIFICAMOS LOS DATOS INSERTADOS
SELECT * FROM dbo.nuevaTablaDestino;

SALUDOS.
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE

0 comentarios:

Publicar un comentario