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