Vous êtes sur la page 1sur 90

MCT.

Jos Gabriel Esparza Castro

CONTENIDO DEL CURSO


Capitulo 1 Capitulo 2 Capitulo 3

Recuperando Datos Modificando Datos (Insert, Update y Delete) Tablas, Tipos de datos e integridad de datos declarativa

Capitulo 4

Utilizando tcnicas de consulta adicionales Funciones, Procedimientos Almacenados, vistas y triggers Tcnicas para mejorar el rendimiento de las consultas

Capitulo 5

Capitulo 6

Capitulo 7

Extendiendo la funcionalidad de SQL con XML, SQLCLR y filestream de SQL con Full-Text Search y Service Broker

Capitulo 8 Extendiendo la funcionalidad

Capitulo 9 Introduccin a las caractersticas

de manejabilidad

Leccin 1

Consultando datos
Sintaxis Select Manipulando conjunto de resultados

La sentencia Select debe incluir al menos Una clausula SELECT y otra FROM
Comodn
SELECT * FRO H Res rces.Empl yee;

Campos individuales
SELECT LoginID, JobTitle, BirthD te, FRO H manResources.Employee; rit lSt t s, Gender

Registros nicos
SELECT DISTINCT color M Production .Product ;

Clausula Where
SELECT DISTINCT color M Production .Product W ERE color IS N T NULL;

SET ANSI_NULLS

SELECT DISTINCT color ROM Production.Product W ERE color <> NULL;

La clausula WHERE puede incluir una variedad de condiciones de bsqueda que pueden incluir Operadores y predicados booleanos tales como: LIKE, BETWEEN, EXISTS, IS NULL, IS NOT NULL y CONTAINS. La clusula CONTAINS est disponible slo cuando creas un ndice full-text en la columna que est siendo comparada.

Qu Sucede con el rendimiento en el uso de las clusulas AND, OR y NOT en un predicado WHERE ejecutado sobre columnas con ndice?

Clausula LIKE
La clusula KIKE nos permite encontrar coincidencia de patrones de caracteres para una columna tipo cadena especificada. Tiene los siguientes comodines.
% Reemplaza a cualquier nmero de caracteres en la cadena. Por ejemplo, %at debe coincidir con at, cat, hat, y that. _ reemplaza exactamente a un carcter en la cadena, por jemplo: _at debe coincidir con cat y hat, pero no con that o at.

[ ] Reemplaza cualquier caracter que cumple con un rango de caracteres. Una serie es representada por una lista de caracteres, por ejemplo [abcd]; pero los caracteres pueden ser separados por comas, por ejemplo [a,b,c,d]. Un rango es sepaarado por un guin, por ejemplo [a d]. ^ Representa a cualquier carcter que no se encuentra en una rango especificado, Por ejemplo : ny character not within a set or range of characters. For example, [^a-d] would be equal to [e z].

SELECT BusinessEntityID, JobTitle ROM umanResources.Employee W ERE JobTitle LIKE 'Market%'; SELECT BusinessEntityID, JobTitle ROM umanResources.Employee W ERE JobTitle LIKE [CE]% ORDER BY JobTitle; SELECT BusinessEntityID, JobTitle ROM umanResources.Employee W ERE JobTitle LIKE [C-E]% ORDER BY JobTitle;

Clasula BETWEEN
La clusula BETWEEN regresa todos los registros basados en un rango de valores. SELECT ProductNumber, Name, Color ROM Production.Product W ERE ListPrice BETWEEN 50 AND 80

Alias de tablas y columnas


Puedes definir un alias de tabla para ser utilizada cuando no es deseable teclear repetidamente el nombre de la tabla a travs de una consulta. SELECT PP. irstName AS ' irst Name', PP.LastName AS 'Last Name , PP.PersonType AS 'Person Category' ROM Person.Person AS PP ORDER BY PersonType Crear una consulta que represente en una sola columna el nombre completo de la persona en la tabla Person

Ejercicios

1.- Ejecutar un cdigo que regrese solamente las columnas ProductSubcategoryID, ProductCategoryID, Name y ModifiedDate. 2.- Ejecutar un cdigo que regrese solamente las columnas de la consulta anterior, pero filtrando slo aquellos productos que tengan la categoria BIKE en cualquier lugar de la columna NAME 3.- Ejecutar un cdigo que regrese solamente las columnas de la consulta anterior, pero filtrando slo aquellos productos que tengan la categoria BIKE en cualquier lugar de la columna NAME, dicha comlumna debe tener un alias llamado

Subcategory Name

4.- Ejecutar la misma consulta anterior, pero que ordene de manera ascendente a travs de la columna Subcategory Name

Leccin 2 Uniendo tablas relacionadas


Usando el Operador JOIN
- Operadores INNER, OUTER, ULL y CROSS JOIN.

El operador JOIN permite retornar datos de columnas almacenadas en mltiples tablas relacionadas. Cuando se define una condicin JOIN, necesitas definir las tablas que sern unidas, el tipo de unin y la condicin de la unin, la cul est compuesta de las columnas de las tablas que sern unidas y el operador lgico. INNER JOIN es el tipo de unin por default cuando slo se especifica la palabra JOIN. SELECT First ame, Last ame, Jo Title, VacationHours, Sic LeaveHours FRO HumanResources.Employee E erson. erson P I ER JOI O E. usinessEntityI = P. usinessEntityI ;

SELECT irstName, LastName, JobTitle, acation ours, SickLeave ours ROM umanResources.Employee INNER JOIN Person.Person ON umanResources.Employee.BusinessEntityID Person.Person.BusinessEntityID;

Outer Joins
Un outer join se puede utilizar para regresar todos los registros de una tabla y slo la informacin de los registros que son en comn de la otra tabla o puede regresar todos los registros de todas las tablas en la clusula JOIN. La palabra OUTER se puede omitir de la sintaxis, pero debes especificar LEFT, RIGHT o FULL.

SELECT FirstName, LastName, JobTitle, VacationHours, SickLeaveHours FROM HumanResources.Employee E RIGHT OUTER JOIN Person.Person P ON E.BusinessEntityID = P.BusinessEntityID;

SELECT FirstName, LastName, JobTitle, VacationHours, SickLeaveHours FROM Person.Person P LEFT OUTER JOIN HumanResources.Employee E ON E.BusinessEntityID = P.BusinessEntityID;

Cross Joins
Cross joins tiene como resultado lo que se conoce como Producto Cartesiano de las dos tablas. Cada registro de la primer tabla se une con cada registro de la segunda tabla en la clausula JOIN.

Trabajando ms de una tabla


Una recomendacin general para el rendimiento es evitar operaciones JOIN que incluyen ms de cuatro o cinco tablas. You should always test new JOIN statements, especially those containing a large number of tables or rows, on a nonproduction server to avoid problems caused by long-running, resource-intensive queries.

SELECT First ame, Last ame, Jo Title, VacationHours, Sic LeaveHours, Email ress FRO HumanResources.Employee I ER JOI Person.Person O HumanResources.Employee. usinessEntityI = Person.Person. usinessEntityI I ER JOI Person.Email ress O Person.Person. usinessEntityI = ress. usinessEntityI Person.Email

Self-Join
Es cuando una sola tabla es referenciada ms de una vez en la clusula JOIN porque sta utiliza un alias diferente cada vez que sta se refiere a una tabla.

SELECT E.FirstName + ' ' + E.LastName AS 'Employee Name' , DS.FirstName + ' ' + DS.LastName AS 'Direct Supervisor' FROM DimEmployee E INNER JOIN DimEmployee DS ON E.ParentEmployeeKey = DS.EmployeeKey;

Ejercicios

1.USE AdventureWorks; SELECT ProductSubcategoryID, ProductCategoryID , Name AS 'Subcategory Name' FROM Production.ProductSubcategory WHERE Name LIKE '%Bike%' ORDER BY [Subcategory Name];

2.-Nota que los resultados incluyen el numero de la categoria


del producto, pero no el nombre de la categoria. modifica la consulta para solucionar esa situacin haciendo un Join de la tabla ProductCategory a ProductSubcategory.

3.- Ahora agrega la tabla Producto, de tal forma que puedas


ver los productos existentes en cada una de esas subcategorias.

4.- Ejecuta una consulta para retornar pares de rdenes de


compra que tienen el mismo vendedor y mtodo de envo. USE AdventureWorks2008; SELECT a.PurchaseOrderID , b.PurchaseOrderID , a. endorID , a.ShipMethodID ROM Purchasing.PurchaseOrder eader AS a JOIN Purchasing.PurchaseOrder eader AS b ON a. endorID b. endorID AND a.ShipMethodID b.ShipMethodID W ERE a.PurchaseOrderID < b.PurchaseOrderID;

5.- Para el ejemplo anterior, hacer ms fcil la lectura


remplazando los IDs de los vendedores y los IDs de los mtodos de envo con sus respectivos nombres

Trabajando con funciones agregadas


COUNT Returns the number of values contained in the data set. COUNT(*) returns the number of rows in the set. When a column is specified, such as COUNT(FaxNo), the value returned reflects the number of rows that contain data in that column. NULL values are ignored. In addition, COUNT DISTINCT returns the number of unique non-NULL values in the data set.

COUNT_BIG Works the same as COUNT, but it returns the bigint data type, while COUNT returns only the int data type. MAX Returns the highest value in the data set for numeric, data, and character-based fields. MIN Returns the lowest value in the data set for numeric, data, and character-based fields.

SUM Returns the total of the values in the data set. You can specify ALL or DISTINCT to produce either the sum of all values or only distinct values in the data set. STDEV Returns the statistical standard deviation of the values in the data set. STDEVP Returns the statistical standard deviation for the population of the values in the data set. VAR Returns the statistical variance of the values in the data set. VARP Returns the statistical variance for the population of the values in the data set.

SELECT A G(Listprice) AS 'Average' , MIN(Listprice) AS 'Minimum' , MAX(Listprice) AS 'Maximum ROM Production.Product W ERE ListPrice <> 0;

GROUP BY
SELECT Production.Product.ProductSubcategoryID , A G(Listprice) AS 'Average' , MIN(Listprice) AS 'Minimum' , MAX(Listprice) AS 'Maximum' ROM Production.Product W ERE ListPrice <> 0 GROUP BY Product.ProductSubcategoryID;

Utilizando los opreadores WITH ROLLUP y WITH CUBE


Para visualizar los subtotales para ms de una columna, puedes agregar los operadores WITH ROLLUP o WITH CUBE. Estos operadores proveen un gran total junto con los subtotales basados en las columnas incluidas en la sentencia GROUP BY .

SELECT Production.ProductCategory.ProductCategoryID , Production.Product.ProductSubcategoryID , AVG(Listprice) AS 'Average' , MIN(Listprice) AS 'Minimum' , MAX(Listprice) AS 'Maximum' FROM Production.Product JOIN Production.ProductSubcategory ON Production.ProductSubcategory.ProductSubcategoryID = Production.Product.ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production.ProductCategory.ProductCategoryID WHERE ListPrice <> 0 GROUP BY Production.ProductCategory.ProductCategoryID, Product.ProductSubcategoryID WITH ROLLUP

El operador WITH CUBE se puede utilizar cundo l sumatoria de la informcin requiere incluirse para ms de una columna. Debido a que cada subcategoria existe en slo una categora, el operador WITH CUBE no tiene efecto en ste ejemplo. Pero si estuvieramos listando el precio promedio para cada producto sobre una orden en particular y para cada subcategoria, se debe usar el operador WITH CUBE para retornar la informacin de sumatoria para cada ID de orden y en cada subcategora

GROUPING
La funcin agregada GROUPING se puede utilizar en un SELECT para mostrar cuales registros tienen informacin de sumatoria y cuales informacion de detalles que puede incluir valores NULL. La funcin agregada GROUPING retorna un 1 si el registro contiene sumatoria y un 0 que nos indica si es un registro de detlle.

GROUPING SETS
GROUPING SETS es un agregado de SQL Server 2008 y da una gran flexibilidad cundo se definen sentencias SELECT que incluyen funciones gregadas . Dependiendo de l forma en que GROUPING SETS se defina, puede ser equivalente a una operacin estndar ROLLUP o CUBE para varias operaciones GROUP BY combinadas con el operador UNION ALL o un subconjunto de los datos que tipicamente deberan ser retornados por un operador ROLLUP o CUBE.

SELECT Production.ProductCategory.ProductCategoryID , Production.Product.ProductSubcategoryID , AVG(Listprice) AS 'Average' FROM Production.Product JOIN Production.ProductSubcategory ON Production.ProductSubcategory.ProductSubcategoryID = Production.Product.ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production.ProductCategory.ProductCategoryID WHERE ListPrice <> 0 GROUP BY GROUPING SETS ((Production.ProductCategory.ProductCategoryID), (Product.ProductSubcategoryID))

SELECT NULL AS 'ProductCategoryID', roduction.Product.ProductSubcategoryID , AVG(Listprice) AS 'Average' FROM Production.Product JOIN Production.ProductSubcategory ON Production.ProductSubcategory.ProductSubcategoryID = Production.Product.ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production.ProductCategory.ProductCategoryID WHERE ListPrice <> 0 GROUP BY (Production.Product.ProductSubcategoryID) UNION ALL SELECT Production.ProductCategory.ProductCategoryID, NULL , AVG(Listprice) AS 'Average' FROM Production.Product JOIN Production.ProductSubcategory ON Production.ProductSubcategory.ProductSubcategoryID = Production.Product.ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production.ProductCategory.ProductCategoryID WHERE ListPrice <> 0 GROUP BY (Production.ProductCategory.ProductCategoryID)

HA ING
La clusula HA ING permite filtrar basandose en los resultados de los clculos ejecutdos por las funciones agregadas.

SELECT Production.ProductCategory.ProductCategoryID , Production.Product.ProductSubcategoryID , AVG(Listprice) AS 'Average , MIN(Listprice) AS 'Minimum' , MAX(Listprice) AS 'Maximum FROM Production.Product JOIN Production.ProductSubcategory ON Production.ProductSubcategory.ProductSubcategoryID = Production.Product.ProductSubcategoryID JOIN Production.ProductCategory ON Production.ProductSubcategory.ProductCategoryID = Production.ProductCategory.ProductCategoryID WHERE ListPrice <> 0 GROUP BY Production.ProductCategory.ProductCategoryID, Product.ProductSubcategoryID WITH ROLLUP HAVING MIN(ListPrice) > 200;

Ejercicios

Combinando Conjunto de Datos


Los operadores UNION EXCEPT INTERSECT

UNION
El operador UNION permite combinar una serie de resultados creados por mltimples sentencias SELECT en una sla serie de resultados.
Reglas: Ambas consultas deben regresar el mismo nmero de columnas. Los titulos de las columnas se toman de la primer sentencias SELECT listada. La clusula ORDER BY se debe definir al final de la ltima sentencia SELECT. Si los registros requieren ser filtrados cada sentencia SELECT debe incluir su clusula WHERE.

SELECT FirstName + ' ' + LastName AS 'Contact Name' , 'Northwind Traders' AS 'Company' , Employees.HomePhone AS 'Phone FROM Employees UNION SELECT ContactName, CompanyName, Phone FROM Customers ORDER BY 'Contact Name';

Ejercicios
1. SELECCIONAR EL NOMBRE, DOMICILIO Y TELEFONO DE LOS CLIENTES UNIDOS ALOS PROVEEDORES 2. FILTRAR LA CONSULTA ANTERIOR PARA MOSTRAR SOLO AQUELLOS CUYO NOMBE EMPIEZE CON a. 3. QUE RESULTADO GENERAR LA SIGUIENTE CONSULTA. SELECT Id_cli as Nombre, Domicilio_CLi as Domicilio, Telefono_Cli AS Telefono FROM cat_clientes UNION SELECTnombre_prov,domicilio_Prov,telefono_prov FROM cat_proveedores

Comandos EXCEPT e INTERSECT


Los operadores EXCEPT e INTERSECT comparan los resultados de dos consultas separadas y proporcionan un subconjunto de la informcin.

El operador EXCEPT retorna todos los registros que existen en la tabla de la izquierda del operador y que no tienen registros coincidentes en la tabla de la derecha. SELECT EmployeeKey FROM DimEmployee EXCEPT SELECT EmployeeKey FROM FactResellerSales

OBTENER TODOS LOS ARTICULOS QUE NO ESTAN EN PROMOCION SELECCIONAR AQUELLOS CLIENTES QUE NO HAN RELIZADO ALGUNA COMPRA

INTERSECT
Reliza lo inverso a la sentencia EXCEPT
SELECT EmployeeKey, FirstName, LastName, Title FROM DimEmployee INTERSECT SELECT FRS.EmployeeKey, DE.FirstName, DE.LastName, DE.Title FROM FactResellerSales FRS JOIN DimEmployee DE ON DE.EmployeeKey = FRS.EmployeeKey ORDER BY Title;

OBTENER TODOS LOS ARTICLOS QUE ESTAN EN PROMOCION

APPLY
Utiliza los resultados de un consulta a una tabla o vista, a la que se llama left input, y los resultados de una funcin que retorna valores tipo tabla, a la que se llama right input. El operador APPLY tiene dos formas: CROSS APPLY y OUTER APPLY. CROSS APPLY retorna slo los registros de la izquierda de la salida, la cual produce datos de la funcin. OUTER APPLY retorna todos los registros de la tabla externa a la izquierda.

SELECT GCI.FirstName, GCI.LastName , GCI.JobTitle, GCI.BusinessEntityType , PE.EmailAddress FROM Person.EmailAddress AS PE CROSS APPLY dbo.ufnGetContactInformation(PE.BusinessEntityID) AS GCI;

FUNCIONES ESCALARES INTEGRADAS

Funciones Fecha y hora


SELECT GETDATE() , 'SYSDATETIME' UNION SELECT GETUTCDATE() , 'SYSUDTDATETIME'

SELECT DATENAME(MONTH,GETDATE()), 'DATENAME SELECT DATEPART(MONTH,GETDATE()), 'DATEPART' SELECT DATEADD(YY,2,GETDATE()), 'AGREGA 2 AOS A LA FECHA ACTUAL' SELECT DATEDIFF(YEAR, GETDATE(),'1/1/2001') SELECT DATEDIFF(DD, GETDATE(), '1/1/2009')

CON ERT
SELECT CONVERT(VARCHAR(30),GETDATE()),'ESTILO POR DEFAULT' SELECT CONVERT(VARCHAR(30),GETDATE(),1),'ESTADOS UNIDOS, SIN SIGLO' SELECT CONVERT(VARCHAR(30),GETDATE(),101),'ESTADOS UNIDOS, CON SIGLO' SELECT CAST(CONVERT(VARCHAR(20), GETDATE(), 112) AS DATETIME),'CAST Y CONVERT SELECT CONVERT(VARCHAR(20), GETDATE(), 112),'SIN CAST Y CONVERT'

FUNCIONES PARA CADENAS


LEFT, RIGHT SELECT LEFT(NOMBRE_CLI,5) AS 'PRIMEROS CINCO' FROM CAT_CLIENTES UPPER, LOWER SELECT UPPER(NOMBRE_CLI) AS 'NOMBRE MAYUSCULAS' FROM CAT_CLIENTES SUBSTRING SELECT SUBSTRING(NOMBRE_CLI,5,10) AS 'NOMBRE MEDIOS' FROM CAT_CLIENTES REPLACE LEN

Modificando Datos
INSERT UPDATE DELETE MERGE

INSERT
INSERT INTO Customers SELECT SUBSTRING(lastname,1,5), 'Northwind Traders', FirstName + ' ' + LastName , 'Employee', Address, City, Region, PostalCode , Country, HomePhone, NULL FROM Employees

SELECT IDENTITY (int, 1,1) AS EmpID, FirstName, LastName, JobTitle , Name AS 'Department', GroupName as 'Division' INTO #EmployeeDepartment FROM HumanResources.Employee JOIN Person.Person ON HumanResources.Employee.BusinessEntityID = Person.Person.BusinessEntityID JOIN HumanResources.EmployeeDepartmentHistory ON HumanResources.Employee.BusinessEntityID = HumanResources.EmployeeDepartmentHistory.BusinessEntityID JOIN HumanResources.Department ON HumanResources.Department.DepartmentID = HumanResources.EmployeeDepartmentHistory.DepartmentID WHERE HumanResources.EmployeeDepartmentHistory.EndDate IS NULL ORDER BY Department, Division

UPDATE
UPDATE Sales.SalesOrderDetail SET UnitPrice = UnitPrice * 1.05 FROM SALES.SalesOrderDetail JOIN Production.Product ON SALES.SalesOrderDetail.ProductID = Production.Product.ProductID WHERE Production.Product.Color = 'Red'

DELETE
DELETE FROM EMPLOYEES WHERE EmployeeID = 7

TRUNCATE TABLE <tablename>

Ejercicios

ID: 3 NOMBRE: Gildardo Gallardo Hurtado DOMICILIO: Obregn 327 Nte. Culiacn Sinaloa TELEFONO: 7122020 CELULAR: 6672202020 NEXTEL: FAX: 71202021 RFC: GOHG701012B17 CORREO:gildardo@mail.com LIMITE DE CREDITO: 120000 SALDO:1200 LISTAPRECIOS:3

ID: 4 NOMBRE: Ana Guadalupe Meza Ortiz DOMICILIO: Leyva 200 pte. Culiacn Sinaloa TELEFONO: 7121212 CELULAR: 6671121212 NEXTEL: FAX: RFC: MAOG601010B17 CORREO: Guadalupe_Meza@Mimail.com LIMITE DE CREDITO: 10000 SALDO:3200 LISTAPRECIOS:2

ID: 5 NOMBRE: Juan Carlos Navarro Castillo DOMICILIO: Zapata 3200 pte. Culiacn Sinaloa TELEFONO: 7171717 CELULAR: 6672181718 NEXTEL: FAX: RFC: NOCC751212B17 CORREO: JuanNavarro@Mimail.com LIMITE DE CREDITO: 80500 SALDO:20000 LISTAPRECIOS:1

Leccin 2
MEJORANDO LA FUNCIONALIDAD DEL DML CON LA CLAUSULA OUTPUT Y LA SENTENCIA MERGE

OUTPUT
La clusula OUTPUT permite retornar informacin de los registros afectados por una sentencia INSERT, UPDATE o DELETE. Con sata funcionalidad puedes ejecutar tareas adicionales ms limpias basadas en la informacin. stas tareas incluyen confirmaciones de e-mail, auditoria de datos y derechos smilares. OUTPUT nos da la posibilidad de tener acceso a a las tablas inserted y deleted.

MERGE
La sentencia MERGE proporciona una habilidad similar para ejecutar una operacin INSERT, UPDATE o DELETE sobre una tabla destino basada en una serie de reglas que son determinadas por una comparacin de registros entre la tabla destino y la tabla origen.

INSERT INTO Employees (LastName, FirstName, Title) OUTPUT getdate(), inserted.EmployeeID INTO Audit VALUES ('Ralls', 'Kim', 'Support Rep');

Crear la tabla Auditoriacon los campos Id_Aud int IDENTITY(1,1) NOT NULL primary key Fecha_Aud datetime NOT NULL Tabla_aud varchar(50) NOT NULL IdPkTabla_Aud int NOT NULL Usuario_Aud varchar(100) NOT NULL

Registra una auditoria para cuando se inserta un registro en la tabla clientes

DELETE FROM [Order Details] OUTPUT deleted.* INTO OrderDetailsArchive FROM Orders join [Order Details] ON Orders.OrderID = [Order Details].OrderID WHERE OrderDate < '12-01-1997';

UPDATE ate Pr ce'

ries ET ate

ry a e

'Drie ry a e

UTPUT i serte .Cate ryID, elete .Cate , i serte .Cate ry a e, et ate(), USER_SNAME() INTO Cate ryCha es
ERE Cate ryID = 7;

MERGE INTO Sales.SalesOrderDetailHistory AS SODH USING Sales.SalesOrderDetail AS SOD ON SODH.salesorderid = SOD.salesorderid AND SODH.SalesOrderDetailID = SOD.SalesOrderDetailID WHEN NOT MATCHED BY TARGET THEN INSERT (Linetotal, SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber, OrderQty , ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount , rowguid, ModifiedDate, Cancelled) VALUES (Linetotal, SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber, OrderQty , ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount , rowguid, ModifiedDate,DEFAULT) WHEN NOT MATCHED BY SOURCE THEN UPDATE SET SODH.Cancelled = 'True';

Leccin 3
Administrando Transacciones
Atomicidad Consistencia Aislamiento Durabilidad

Definiendo Transacciones Explcitas


BEGIN TRANSACTION
COMMIT TRANSACTION ROLLBACK TRANSACTION Mientras una transaccin est activa, se mantiene un bloqueo sobre los recursos accesados, basandose en un nivel de aisalamiento de la transaccin

BEGIN TRANSACTION INSERT INTO TestTable VALUES (1, 'a', 'b'); BEGIN TRANSACTION UPDATE TestTable SET Col2 = 'c' WHERE TestID = 1; COMMIT TRANSACTION; ROLLBACK;

SAVE TRANSACTION

savepoint_name

Obteniendo informacin acerca de las tansacciones


@@trancount sys.dm_tran_active_transactions sys.dm_tran_session_transactions sys.dm_tran_database_transactions sys.dm_tran_current_transaction

Locking
pessimistic optimistic

Modos de locking
Shared (S)
Para recursos de operaciones de lectura (SELECT) Son liberados tan pronto como la lectura termina

Update (U)
Para recursos de operaciones de lectura (SELECT) Son liberados tan pronto como la lectura termina Placed on resources where a shared (S) lock is required, but the need

Excl sive ( ) I te t (IS, I , SI ) Sche a (Sch-M, Sch-S) l Update ( U) ey-ra e

Vous aimerez peut-être aussi