SlideShare una empresa de Scribd logo
1 de 26
Pablo Espada Bueno www.programadorautonomo.net www.esbupa.com
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],CREATE TABLE mySchema.LargeTable (varcharCol varchar(max)) CREATE TABLE mySchema.XMLTable (idCol int, xmlCol xml)
[object Object],[object Object],[object Object],[object Object],ALTER INDEX IX_CustDOB ON Sales.Customer DISABLE ALTER INDEX PK_CustId ON Sales.Customer REBUILD ALTER INDEX ALL ON Sales.Customer REBUILD
[object Object],[object Object],[object Object],ALTER INDEX PK_CustId ON Sales.Customer REORGANIZE CREATE NONCLUSTERED INDEX IX_CustomerPostalCode  ON Sales.Customer (PostalCode)  INCLUDE (AddressLine1, AddressLine2, City)
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
DECLARE @InsertDetails TABLE ( ProductID int, InsertedBy sysname )  INSERT INTO Stock.ProductList  OUTPUT INSERTED.ProductID, suser_name() INTO @InsertDetails  VALUES ('Racing Bike', 412.99)  SELECT * FROM @InsertDetails  DECLARE @PriceChangeDetails TABLE ( ProductID int, OldPrice money, NewPrice money, UpdatedBy sysname )  UPDATE Stock.ProductList SET Price = 3.99  OUTPUT INSERTED.ProductID, DELETED.Price, INSERTED.Price, suser_name() INTO @PriceChangeDetails  WHERE ProductID = 1  SELECT * FROM @PriceChangeDetails  DECLARE @DeleteDetails TABLE ( ProductID int, DeletedBy sysname ) DELETE Stock.ProductList  OUTPUT DELETED.ProductID, suser_name() INTO @DeleteDetails  WHERE ProductID = 2  SELECT * FROM @DeleteDetails
[object Object],[object Object],[object Object],WITH TopSales (SalesPersonID, NumSales)  AS  (  SELECT SalesPersonID, Count(*)  FROM Sales.SalesOrderHeader  GROUP BY SalesPersonId  )  --Select simple SELECT * FROM TopSales  WHERE SalesPersonID IS NOT NULL  ORDER BY NumSales DESC  --Ejemplo de Join SELECT ts.SalesPersonID, sp.SalesYTD, ts.NumSales  FROM Sales.SalesPerson sp INNER JOIN TopSales ts ON ts.SalesPersonID = sp.SalesPersonID  ORDER BY NumSales DESC
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],CREATE TABLE Sales.[Order]  (  Customer varchar(8),  Product varchar(5),  Quantity int  )  Customer Product Quantity Mike  Bike  3 Mike  Chain  2 Mike  Bike  5 Lisa  Bike  3 Lisa  Chain  3 Lisa  Chain  4
[object Object],[object Object],SELECT * FROM Sales.[Order]  PIVOT (SUM(Quantity) FOR Product IN ([Bike],[Chain])) AS PVT Customer Bike Chain Lisa  3 7 Mike  8 2 Lisa  3 7 Mike  8 2 Lisa  3 7 Mike  8 2
[object Object],[object Object],SELECT Customer, Product, Quantity FROM Sales.PivotedOrder UNPIVOT (Quantity FOR Product IN ([Bike],[Chain])) AS UnPVT  Customer Product Quantity Mike  Bike  8 Mike  Chain  2 Lisa  Bike  3 Lisa  Chain  7
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],CREATE FUNCTION Sales.MostRecentOrders(@CustID int) RETURNS TABLE AS  RETURN  SELECT TOP (3) SalesOrderID, OrderDate  FROM Sales.SalesOrderHeader  WHERE CustomerID = @CustID  ORDER BY OrderDate DESC SELECT Name Customer, MR.*  FROM Sales.Store  CROSS APPLY Sales.MostRecentOrders(CustomerID) AS MR
[object Object],SELECT Name AS Customer, MR.*  FROM Sales.Store  OUTER APPLY Sales.MostRecentOrders(CustomerID) AS MR
[object Object],[object Object],[object Object],OVER ( [ PARTITION BY < value_expression > , ... [ n ] ]  ORDER BY <column> [ ASC | DESC ] [, ...[ n ] ] )
[object Object],SELECT P.Name Product, P.ListPrice, PSC.Name Category, RANK() OVER(PARTITION BY PSC.Name ORDER BY P.ListPrice DESC) AS PriceRank FROM Production.Product P JOIN Production.ProductSubCategory PSC ON P.ProductSubCategoryID = PSC.ProductSubCategoryID
[object Object],SELECT P.Name Product, P.ListPrice, PSC.Name Category, DENSE_RANK() OVER(PARTITION BY PSC.Name ORDER BY P.ListPrice DESC) AS PriceRank FROM Production.Product P JOIN Production.ProductSubCategory PSC ON P.ProductSubCategoryID = PSC.ProductSubCategoryID
[object Object],SELECT ROW_NUMBER() OVER(PARTITION BY PC.Name ORDER BY ListPrice) AS Row, PC.Name Category, P.Name Product, P.ListPrice FROM Production.Product P JOIN Production.ProductSubCategory PSC ON P.ProductSubCategoryID = PSC.ProductSubCategoryID JOIN Production.ProductCategory PC ON PSC.ProductCategoryID = PC.ProductCategoryID
[object Object],SELECT NTILE(3) OVER(PARTITION BY PC.Name ORDER BY ListPrice) AS PriceBand, PC.Name Category, P.Name Product, P.ListPrice FROM Production.Product P JOIN Production.ProductSubCategory PSC ON P.ProductSubCategoryID = PSC.ProductSubCategoryID JOIN Production.ProductCategory PC ON PSC.ProductCategoryID = PC.ProductCategoryID
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],BEGIN TRY { sql_statement | statement_block } END TRY BEGIN CATCH TRAN_ABORT { sql_statement | statement_block } END CATCH
[object Object],[object Object],[object Object]
CREATE TABLE dbo.DataTable (ColA int PRIMARY KEY, ColB int) CREATE TABLE dbo.ErrorLog (ColA int, ColB int, error int, date datetime) GO CREATE PROCEDURE dbo.AddData @a int, @b int AS SET XACT_ABORT ON BEGIN TRY BEGIN TRAN INSERT INTO dbo.DataTable VALUES (@a, @b) COMMIT TRAN END TRY BEGIN CATCH TRAN_ABORT DECLARE @err int SET @err = @@error --trap the error number ROLLBACK TRAN INSERT INTO dbo.ErrorLog VALUES (@a, @b, @err, GETDATE()) END CATCH GO EXEC dbo.AddData 1, 1 EXEC dbo.AddData 2, 2 EXEC dbo.AddData 1, 3 --violates the primary key

Más contenido relacionado

La actualidad más candente

Tutorial de programación hp user rpl en modo algebraico v1.2
Tutorial de programación hp user rpl en modo algebraico v1.2Tutorial de programación hp user rpl en modo algebraico v1.2
Tutorial de programación hp user rpl en modo algebraico v1.2Jeremy Butler
 
Sesion08 - Cursores (Oracle)
Sesion08 - Cursores (Oracle)Sesion08 - Cursores (Oracle)
Sesion08 - Cursores (Oracle)José Toro
 
Manejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gManejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gonsepulvedas
 
Investigacion Uno
Investigacion UnoInvestigacion Uno
Investigacion UnoRoberto
 
Sesión11 - Paquetes (Oracle)
Sesión11 - Paquetes (Oracle)Sesión11 - Paquetes (Oracle)
Sesión11 - Paquetes (Oracle)José Toro
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresEdwin Romero
 
Introducción a Sql
Introducción a SqlIntroducción a Sql
Introducción a Sqlalexmerono
 
Pseudocódigo apunte segun sea y subrutinas
Pseudocódigo apunte segun sea y subrutinasPseudocódigo apunte segun sea y subrutinas
Pseudocódigo apunte segun sea y subrutinasAlejandro Canosa
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de controlFernando Solis
 
Sentencias Sql
Sentencias SqlSentencias Sql
Sentencias Sqlfer951
 
Comandos del-ddl-y-del-dml-liz
Comandos del-ddl-y-del-dml-lizComandos del-ddl-y-del-dml-liz
Comandos del-ddl-y-del-dml-lizBolivar Castillo
 

La actualidad más candente (20)

Funciones
FuncionesFunciones
Funciones
 
Visual Basic
Visual BasicVisual Basic
Visual Basic
 
Elementos
ElementosElementos
Elementos
 
Tutorial de programación hp user rpl en modo algebraico v1.2
Tutorial de programación hp user rpl en modo algebraico v1.2Tutorial de programación hp user rpl en modo algebraico v1.2
Tutorial de programación hp user rpl en modo algebraico v1.2
 
Comandos SQL
Comandos SQLComandos SQL
Comandos SQL
 
Sesion08 - Cursores (Oracle)
Sesion08 - Cursores (Oracle)Sesion08 - Cursores (Oracle)
Sesion08 - Cursores (Oracle)
 
Manejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gManejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50g
 
Investigacion Uno
Investigacion UnoInvestigacion Uno
Investigacion Uno
 
Sesión11 - Paquetes (Oracle)
Sesión11 - Paquetes (Oracle)Sesión11 - Paquetes (Oracle)
Sesión11 - Paquetes (Oracle)
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursores
 
Introducción a Sql
Introducción a SqlIntroducción a Sql
Introducción a Sql
 
Pseudocódigo apunte segun sea y subrutinas
Pseudocódigo apunte segun sea y subrutinasPseudocódigo apunte segun sea y subrutinas
Pseudocódigo apunte segun sea y subrutinas
 
Pl Sql
Pl SqlPl Sql
Pl Sql
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Manual hp2
Manual hp2Manual hp2
Manual hp2
 
Los lenguajes
Los lenguajesLos lenguajes
Los lenguajes
 
Master vba
Master vbaMaster vba
Master vba
 
Sentencias Sql
Sentencias SqlSentencias Sql
Sentencias Sql
 
Comandos vb
Comandos vbComandos vb
Comandos vb
 
Comandos del-ddl-y-del-dml-liz
Comandos del-ddl-y-del-dml-lizComandos del-ddl-y-del-dml-liz
Comandos del-ddl-y-del-dml-liz
 

Similar a Mejoras en T-SQL para SQL Server 2005 (20)

Sentencia select
Sentencia selectSentencia select
Sentencia select
 
Vistas (1)
Vistas (1)Vistas (1)
Vistas (1)
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Qué es SQL
Qué es SQL Qué es SQL
Qué es SQL
 
Sentencias sql
Sentencias sqlSentencias sql
Sentencias sql
 
bd2-teorico02.pdf
bd2-teorico02.pdfbd2-teorico02.pdf
bd2-teorico02.pdf
 
Tutorial Sql
Tutorial SqlTutorial Sql
Tutorial Sql
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Consultas condicionales en sq server
Consultas condicionales en sq serverConsultas condicionales en sq server
Consultas condicionales en sq server
 
Funciones+sql+server
Funciones+sql+serverFunciones+sql+server
Funciones+sql+server
 
Commit y rollback
Commit y rollbackCommit y rollback
Commit y rollback
 
Ti. Sql.Caso1al9.Consultas
Ti. Sql.Caso1al9.ConsultasTi. Sql.Caso1al9.Consultas
Ti. Sql.Caso1al9.Consultas
 
Arreglos, Procedimientos y Funciones
Arreglos, Procedimientos y FuncionesArreglos, Procedimientos y Funciones
Arreglos, Procedimientos y Funciones
 
Seleccion de datos_sql_2005
Seleccion de datos_sql_2005Seleccion de datos_sql_2005
Seleccion de datos_sql_2005
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Proyecto Base de Datos I
Proyecto Base de Datos IProyecto Base de Datos I
Proyecto Base de Datos I
 
Guia de ejercicio sql
Guia de ejercicio sqlGuia de ejercicio sql
Guia de ejercicio sql
 
Precentacion de sql visual
Precentacion de sql visualPrecentacion de sql visual
Precentacion de sql visual
 
Manual_Mysql Query Browser
Manual_Mysql Query BrowserManual_Mysql Query Browser
Manual_Mysql Query Browser
 
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
 

Último

#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaYeimys Ch
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nóminacuellosameidy
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y maslida630411
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 

Último (20)

#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nómina
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y mas
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 

Mejoras en T-SQL para SQL Server 2005

  • 1. Pablo Espada Bueno www.programadorautonomo.net www.esbupa.com
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. DECLARE @InsertDetails TABLE ( ProductID int, InsertedBy sysname ) INSERT INTO Stock.ProductList OUTPUT INSERTED.ProductID, suser_name() INTO @InsertDetails VALUES ('Racing Bike', 412.99) SELECT * FROM @InsertDetails DECLARE @PriceChangeDetails TABLE ( ProductID int, OldPrice money, NewPrice money, UpdatedBy sysname ) UPDATE Stock.ProductList SET Price = 3.99 OUTPUT INSERTED.ProductID, DELETED.Price, INSERTED.Price, suser_name() INTO @PriceChangeDetails WHERE ProductID = 1 SELECT * FROM @PriceChangeDetails DECLARE @DeleteDetails TABLE ( ProductID int, DeletedBy sysname ) DELETE Stock.ProductList OUTPUT DELETED.ProductID, suser_name() INTO @DeleteDetails WHERE ProductID = 2 SELECT * FROM @DeleteDetails
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26. CREATE TABLE dbo.DataTable (ColA int PRIMARY KEY, ColB int) CREATE TABLE dbo.ErrorLog (ColA int, ColB int, error int, date datetime) GO CREATE PROCEDURE dbo.AddData @a int, @b int AS SET XACT_ABORT ON BEGIN TRY BEGIN TRAN INSERT INTO dbo.DataTable VALUES (@a, @b) COMMIT TRAN END TRY BEGIN CATCH TRAN_ABORT DECLARE @err int SET @err = @@error --trap the error number ROLLBACK TRAN INSERT INTO dbo.ErrorLog VALUES (@a, @b, @err, GETDATE()) END CATCH GO EXEC dbo.AddData 1, 1 EXEC dbo.AddData 2, 2 EXEC dbo.AddData 1, 3 --violates the primary key