Sunteți pe pagina 1din 17

Modulo 7

Usando Insert, Update y Delete para Modificar los Datos

Descripción General del Módulo

Agregar datos a tablas Modificar y eliminar datos Generando Números

Lección 1: Agregar datos a las tablas

Usar INSERT para agregar datos Usar INSERT con SELECT y EXEC Usando SELECT INTO Demostración: inserción de datos en tablas

Usar INSERT para agregar datos

La instrucción INSERT sola fila por defecto

VALUES inserta una

INSERT INTO Sales.OrderDetails(

INSERT INTO Sales . OrderDetails (
INSERT INTO Sales . OrderDetails (
 

orderid, productid, unitprice, qty, discount)

orderid , productid , unitprice , qty , discount )
orderid , productid , unitprice , qty , discount )

VALUES(12000,39,18,2,0.05);

VALUES ( 12000 , 39 , 18 , 2 , 0.05 );

Los constructores de tablas y filas agregan capacidad de múltiples filas para

INSERT VALUES

INSERT INTO Sales.OrderDetails(

INSERT INTO Sales . OrderDetails (
INSERT INTO Sales . OrderDetails (

orderid, productid, unitprice, qty, discount) VALUES

orderid , productid , unitprice , qty , discount ) VALUES
orderid , productid , unitprice , qty , discount ) VALUES

(12001,39,18,2,0.05),

(12002,39,18,5,0.10);

Usar INSERT con SELECT y EXEC

INSERT

SELECT

se usa para insertar el conjunto de

resultados de una consulta en una tabla existente

INSERT INTO Sales.OrderHist(

INSERT INTO Sales . OrderHist ( orderid , custid , empid , orderdate ) SELECT orderid
INSERT INTO Sales . OrderHist ( orderid , custid , empid , orderdate ) SELECT orderid

orderid,custid,empid,orderdate)

SELECT orderid,custid,empid,orderdate

FROM Sales.Orders WHERE orderdate < '20080101';

) SELECT orderid , custid , empid , orderdate FROM Sales . Orders WHERE orderdate <
) SELECT orderid , custid , empid , orderdate FROM Sales . Orders WHERE orderdate <

INSERT

EXEC

se usa para insertar el resultado de un

procedimiento almacenado o expresión SQL dinámica en una tabla existente

INSERT INTO dbo.T1 (productid, productname, unitprice) EXEC Production.ProdsByCategory @numrows = 5, @catid=1;
INSERT INTO dbo.T1 (productid, productname, unitprice)
EXEC Production.ProdsByCategory
@numrows = 5, @catid=1;

Usando SELECT INTO

SELECT

INTO

pero SELECT

es similar a INSERT

SELECT

INTO

crea una nueva tabla cada

vez que se ejecuta la instrucción Copia los nombres de las columnas, los tipos de datos y la nulabilidad No copia constraints o indexes

SELECT orderid, custid, empid, orderdate, shippeddate INTO Sales.OrderArchive FROM Sales.Orders

SELECT orderid , custid , empid , orderdate , shippeddate INTO Sales . OrderArchive FROM Sales
SELECT orderid , custid , empid , orderdate , shippeddate INTO Sales . OrderArchive FROM Sales
SELECT orderid , custid , empid , orderdate , shippeddate INTO Sales . OrderArchive FROM Sales

WHERE orderdate < '20080101';

WHERE orderdate < '20080101' ;

Demostración: Insertar datos en las Tablas

En esta demostración, verás cómo:

Insertar filas en tablas

Lección 2: Modificar y eliminar datos

Usando UPDATE para modificar datos

Usar MERGE para modificar datos Usar DELETE para eliminar datos

Usar TRUNCATE TABLE para eliminar datos

Demostración: modificación y eliminación de datos de tablas

Usando UPDATE para modificar datos

Actualiza todas las filas en una tabla o vista

El conjunto se puede filtrar con una cláusula WHERE Se puede definir con una cláusula JOIN

Solo las columnas especificadas en la cláusula SET se modifican

UPDATE Production.Products SET unitprice = (unitprice * 1.04) WHERE categoryid = 1 AND discontinued =
UPDATE Production.Products
SET unitprice = (unitprice * 1.04)
WHERE categoryid = 1 AND discontinued = 0;

Usar MERGE para modificar datos

MERGE modifica los datos según una condición

Cuando la fuente coincide con el objetivo Cuando la fuente no tiene coincidencias en el objetivo

Cuando el objetivo no coincide en la fuente

MERGE INTO schema_name.table_name AS TargetTbl USING (SELECT <select_list>) AS SourceTbl ON (TargetTbl.col1 =
MERGE INTO schema_name.table_name AS TargetTbl
USING (SELECT <select_list>) AS SourceTbl
ON (TargetTbl.col1 = SourceTbl.col1)
WHEN MATCHED THEN
UPDATE SET col2 = SourceTbl.col2
WHEN NOT MATCHED THEN
INSERT (<column_list>)
VALUES (<value_list>);

Usar DELETE para eliminar datos

DELETE sin una clausula WHERE elimina todas las filas

DELETE FROM dbo.Nums ; DELETE FROM Sales.OrderDetails WHERE orderid = 10248;

DELETE FROM dbo.Nums;

DELETE FROM dbo.Nums ;
DELETE FROM dbo.Nums ; DELETE FROM Sales.OrderDetails WHERE orderid = 10248;
DELETE FROM Sales.OrderDetails WHERE orderid = 10248;
DELETE FROM Sales.OrderDetails WHERE orderid = 10248;

DELETE FROM Sales.OrderDetails WHERE orderid = 10248;

DELETE FROM Sales.OrderDetails WHERE orderid = 10248;
DELETE FROM Sales.OrderDetails WHERE orderid = 10248;

Usando la clausula WHERE para especificar las filas borradas

Usar TRUNCATE TABLE para eliminar datos

TRUNCATE TABLE Borra toda la tabla

Almacenamiento desasignado físicamente, filas no eliminadas individualmente

Minimanente Registrado

Se puede revertir si TRUNCATE se emite dentro de una transacción

TRUNCATE TABLE fallará si la tabla está referenciada

por una restricción de clave externa en otra tabla

TRUNCATE TABLE dbo . Nums ;
TRUNCATE TABLE dbo . Nums ;

TRUNCATE TABLE dbo.Nums;

TRUNCATE TABLE dbo . Nums ;

Demostración: modificación y eliminación de

datos de tablas

En esta demostración, verás cómo:

Actualizar y eliminar datos en una tabla

Lección 3: Generando Números

Usando IDENTITY

Usando Sequences

Usando IDENTITY

La propiedad de IDENTITY de una columna genera automáticamente números secuenciales para su inserción en una tabla

Puede especificar valores de iniciales e incremento opcionales

Solo una columna en una tabla puede tener definida la propiedad IDENTITY

IDENTITY column omitted in INSERT statements

Funciones proporcionadas para devolver los últimos valores generados

CREATE TABLE Production.Products( productid int IDENTITY(1,1) NOT NULL, productname nvarchar(40) NOT NULL, categoryid
CREATE TABLE Production.Products(
productid int IDENTITY(1,1) NOT NULL,
productname nvarchar(40) NOT NULL,
categoryid int NOT NULL,
unitprice money NOT NULL)

Usando Sequences

Objetos independientes en la base de datos

Más flexible que la propiedad IDENTITY

Se puede usar como valor predeterminado para una columna

Administrar con instrucciones CREATE / ALTER / DROP Recuperar valor con la clausula NEXT VALUE FOR

-- Define a sequence

CREATE SEQUENCE dbo.InvoiceSeq AS INT START WITH 1 INCREMENT BY 1;

-- Retrieve next available value from sequence

SELECT NEXT VALUE FOR dbo.InvoiceSeq;

WITH 1 INCREMENT BY 1 ; -- Retrieve next available value from sequence SELECT NEXT VALUE
WITH 1 INCREMENT BY 1 ; -- Retrieve next available value from sequence SELECT NEXT VALUE
WITH 1 INCREMENT BY 1 ; -- Retrieve next available value from sequence SELECT NEXT VALUE
WITH 1 INCREMENT BY 1 ; -- Retrieve next available value from sequence SELECT NEXT VALUE

Revisión del Módulo

Preguntas de Revisión