Este documento presenta una introducción a las nuevas características de SQL Server 2005. Comienza con una agenda que incluye lo nuevo en SQL Server, la integración con CLR, mejoras en T-SQL y XML. Luego procede a explicar en más detalle cada una de estas áreas, incluyendo lo nuevo en seguridad, motor relacional, integración con .NET y más.
Con el uso de CDI, para la inyección de dependencias, y la consolidación de la plataforma Arquillian, ya no hay excusas en la plataforma Java EE para el desarrollo de pruebas.
Estas son las slides que utilicé en la charla de la reunión de Septiembre de 2014 del GDG de Madrid.
Desde hace tiempo, los desarrolladores venimos utilizando scripts para automatizar y facilitarnos la construcción automática de nuestros proyectos.
En los intentos de estandarización de esos Scripts, la primera herramienta fue Ant, muy flexible, pero muy tediosa por lo verboso y por que siempre había que empezar desde cero.
La llegada de Maven supuso una cierta convención en las tareas y fases de construcción de un proyecto. Pero también incluía una tremenda facilidad para la gestión de librerías y dependencias. A cambio, impone una cierta rigidez en la estructura del script.
Gradle ha venido a buscar lo mejor de los dos mundos: la fexibilidad de Ant, la convención de Maven, la gestión de librerías de Ivy o Mvn.... y todo ello con un lenguaje de scripting más parecido al código que al XML en el que se basan las dos precedesoras.
Desde hace meses, Google ya ha apostado por Gradle como sistema de construcción de proyectos para Android en su Android Studio.
En esta charla, haremos una introducción a Gradle como herramienta de construcción de proyectos.
La presentación que realice para el SpringIO 2012 en Madrid, España
Hablando acerca de la arquitectura de los plugins de Grails y para dar los conocimientos básicos de comprensión del funcionamiento y estructura de componentes que co
En estas charla pongo un poco de orden en el mundo de Jenkins Pipeline, la nueva sintaxis para definir jobs en Jenkins. Hablaremos de las bases y progresaremos hasta llegar a las cosas más chulas que Pipeline nos proporciona.
En esta introducción podremos conocer 40 novedades que trae la nueva versión de la plataforma a liberarse el próximo mes de Septiembre 2017.
Accede a la presentación con audio en: https://youtu.be/UeuxAkFKr6I
Con el uso de CDI, para la inyección de dependencias, y la consolidación de la plataforma Arquillian, ya no hay excusas en la plataforma Java EE para el desarrollo de pruebas.
Estas son las slides que utilicé en la charla de la reunión de Septiembre de 2014 del GDG de Madrid.
Desde hace tiempo, los desarrolladores venimos utilizando scripts para automatizar y facilitarnos la construcción automática de nuestros proyectos.
En los intentos de estandarización de esos Scripts, la primera herramienta fue Ant, muy flexible, pero muy tediosa por lo verboso y por que siempre había que empezar desde cero.
La llegada de Maven supuso una cierta convención en las tareas y fases de construcción de un proyecto. Pero también incluía una tremenda facilidad para la gestión de librerías y dependencias. A cambio, impone una cierta rigidez en la estructura del script.
Gradle ha venido a buscar lo mejor de los dos mundos: la fexibilidad de Ant, la convención de Maven, la gestión de librerías de Ivy o Mvn.... y todo ello con un lenguaje de scripting más parecido al código que al XML en el que se basan las dos precedesoras.
Desde hace meses, Google ya ha apostado por Gradle como sistema de construcción de proyectos para Android en su Android Studio.
En esta charla, haremos una introducción a Gradle como herramienta de construcción de proyectos.
La presentación que realice para el SpringIO 2012 en Madrid, España
Hablando acerca de la arquitectura de los plugins de Grails y para dar los conocimientos básicos de comprensión del funcionamiento y estructura de componentes que co
En estas charla pongo un poco de orden en el mundo de Jenkins Pipeline, la nueva sintaxis para definir jobs en Jenkins. Hablaremos de las bases y progresaremos hasta llegar a las cosas más chulas que Pipeline nos proporciona.
En esta introducción podremos conocer 40 novedades que trae la nueva versión de la plataforma a liberarse el próximo mes de Septiembre 2017.
Accede a la presentación con audio en: https://youtu.be/UeuxAkFKr6I
The Spring 2015 release companion book for the upcoming documentary film Unbranded. I designed this promotional piece and wrote the copy. @Unbrandedthefilm
Row level security en sql azure y en on premiseSpanishPASSVC
Row Level Security es una nueva herramienta, por ahora solamente disponible en la versión V12 de la base de datos SQL Azure, que permite a los administradores otorgar derechos de lectura selectiva a los usuarios. En la conferencia, Geri mostrará cómo emplear Row Level Security en las bases de datos "On Premise", y luego como aprovechar todos los beneficios y ventajas de esta nueva herramienta en SQL Azure. Por último, Geri presentará las distintas formas de implementación con ejemplos, experiencias, aspectos de rendimiento, etc.
En programación, un espacio de nombres (técnica y correctamente definido como namespace), en su acepción más simple, es un conjunto de nombres en el cual todos los nombres son únicos.
The Spring 2015 release companion book for the upcoming documentary film Unbranded. I designed this promotional piece and wrote the copy. @Unbrandedthefilm
Row level security en sql azure y en on premiseSpanishPASSVC
Row Level Security es una nueva herramienta, por ahora solamente disponible en la versión V12 de la base de datos SQL Azure, que permite a los administradores otorgar derechos de lectura selectiva a los usuarios. En la conferencia, Geri mostrará cómo emplear Row Level Security en las bases de datos "On Premise", y luego como aprovechar todos los beneficios y ventajas de esta nueva herramienta en SQL Azure. Por último, Geri presentará las distintas formas de implementación con ejemplos, experiencias, aspectos de rendimiento, etc.
En programación, un espacio de nombres (técnica y correctamente definido como namespace), en su acepción más simple, es un conjunto de nombres en el cual todos los nombres son únicos.
Seguridad Base de Datos sql injection v1.0José Moreno
Método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación a nivel de validación de entradas para realizar operaciones sobre una base de datos.
1. SQL Server 2005 paraSQL Server 2005 para
desarrolladoresdesarrolladores
Jesús López Méndez (SqlRanger)Jesús López Méndez (SqlRanger)
Mentor Asociado. MVP Visual Developer–Visual BasicMentor Asociado. MVP Visual Developer–Visual Basic
jesus@solidqualitylearning.comjesus@solidqualitylearning.com
2. 220/06/13 Introducción a SQL Server 2005
More than just trainingMore than just training
Mentores Principales:Mentores Principales:
Itzik Ben-Gan, Kalen Delaney, Fernando G. Guerrero,Itzik Ben-Gan, Kalen Delaney, Fernando G. Guerrero,
Michael Hotek, Brian Moran , Ron TalmageMichael Hotek, Brian Moran , Ron Talmage
Iberoamericana:Iberoamericana:
Miguel Egea, Alejandro Leguízamo, Jesús López, PabloMiguel Egea, Alejandro Leguízamo, Jesús López, Pablo
Pelaez, Jordi Rambla, Eladio Rincón, Daniel Seara,Pelaez, Jordi Rambla, Eladio Rincón, Daniel Seara,
Guillermo Som, Antonio Soto, Adolfo WiernikGuillermo Som, Antonio Soto, Adolfo Wiernik
Ayudando a obtener lo mejor de SQLServer y .NetAyudando a obtener lo mejor de SQLServer y .Net
concon
EntrenamientoEntrenamiento
ConsultoríaConsultoría
MentoringMentoring
3. 320/06/13 Introducción a SQL Server 2005
AgendaAgenda
Lo nuevo en SQL ServerLo nuevo en SQL Server
Integración con el CLRIntegración con el CLR
Mejoras en T-SQLMejoras en T-SQL
XMLXML
Service BrokerService Broker
4. 420/06/13 Introducción a SQL Server 2005
Lo nuevo de SQL Server 2005Lo nuevo de SQL Server 2005
Mejoras en la seguridadMejoras en la seguridad
Mejoras en el motor relacionalMejoras en el motor relacional
Integración con .NET FrameworkIntegración con .NET Framework
Tipo XML nativo y el lenguaje XQueryTipo XML nativo y el lenguaje XQuery
Service BrokerService Broker
Servicios Web XMLServicios Web XML
5. 520/06/13 Introducción a SQL Server 2005
Lo nuevo en el acceso a datosLo nuevo en el acceso a datos
Soporte paraSoporte para
Tipos de datos definidos por el usuarioTipos de datos definidos por el usuario
Tipo XMLTipo XML
Cliente nativo para ODBC y OLEDBCliente nativo para ODBC y OLEDB
Mejoras en SqlClient:Mejoras en SqlClient:
MARSMARS
NotificacionesNotificaciones
Ejecución asíncronaEjecución asíncrona
SQL XML:SQL XML:
Soporte XQuerySoporte XQuery
6. 620/06/13 Introducción a SQL Server 2005
Integración con CLRIntegración con CLR
SQL Server como anfitrión del CLRSQL Server como anfitrión del CLR
Objetivos:Objetivos:
SeguridadSeguridad
FiabilidadFiabilidad
RendimientoRendimiento
Uso de ensambladosUso de ensamblados
7. 720/06/13 Introducción a SQL Server 2005
CLR HospedadoCLR Hospedado
Las aplicaciones se ejecutan en el mismo espacioLas aplicaciones se ejecutan en el mismo espacio
de direccionesde direcciones
Procedimientos almacenados escritos en cualquierProcedimientos almacenados escritos en cualquier
lenguaje .NETlenguaje .NET
Permite el acceso a recursos fuera de SQL ServerPermite el acceso a recursos fuera de SQL Server
Controlado por SQL ServerControlado por SQL Server
ICorRuntimeHostICorRuntimeHost
ICLRRuntimeHostICLRRuntimeHost
Un dominio de aplicación por cada base de datosUn dominio de aplicación por cada base de datos
8. 820/06/13 Introducción a SQL Server 2005
Seguridad CLRSeguridad CLR
CAS ya no valeCAS ya no vale
Establecido por el DBA a nivel deEstablecido por el DBA a nivel de
ensamblado:ensamblado:
SeguroSeguro
Acceso externoAcceso externo
InseguroInseguro
9. 920/06/13 Introducción a SQL Server 2005
Registro de ensambladosRegistro de ensamblados
CREATE ASSEMBLYCREATE ASSEMBLY
Se carga desde disco o streamSe carga desde disco o stream
Se le asigna un nombreSe le asigna un nombre
Se guarda en la base de datosSe guarda en la base de datos
DROP ASSEMBLYDROP ASSEMBLY
Primero eliminar los objetos dependientesPrimero eliminar los objetos dependientes
ALTER ASSEMBLYALTER ASSEMBLY
Sin alterar las firmas de los métodosSin alterar las firmas de los métodos
CREATE ASSEMBLY math FROM 'c:typesmath.dll‘
WITH PERMISSION_SET = EXTERNAL_ACCESS
10. 1020/06/13 Introducción a SQL Server 2005
ReferenciasReferencias
SQL Server determina las referencias delSQL Server determina las referencias del
ensambladoensamblado
Tienen que estar en el mismo directorio, noTienen que estar en el mismo directorio, no
en la GACen la GAC
Los añade si es necesarioLos añade si es necesario
11. 1120/06/13 Introducción a SQL Server 2005
Información de ensambladosInformación de ensamblados
Sys.asembliesSys.asemblies
Sys.assembly_filesSys.assembly_files
Sys.assembly_referencesSys.assembly_references
12. 1220/06/13 Introducción a SQL Server 2005
Lo que se puede hacerLo que se puede hacer
Funciones definidas por el usuarioFunciones definidas por el usuario
Procedimientos almacenadosProcedimientos almacenados
TriggersTriggers
Tipos de datos definidos por el usuarioTipos de datos definidos por el usuario
AgregadosAgregados
13. 1320/06/13 Introducción a SQL Server 2005
El proveedor SqlServerEl proveedor SqlServer
Permite acceder a datos de SQL Server desdePermite acceder a datos de SQL Server desde
procedimientos CLRprocedimientos CLR
No se necesita establecer una conexiónNo se necesita establecer una conexión
SqlContextSqlContext
SqlCommandSqlCommand
SqlTransactionSqlTransaction
SqlDataReaderSqlDataReader
SqlPipeSqlPipe
SqlTriggerContextSqlTriggerContext
14. 1420/06/13 Introducción a SQL Server 2005
Funciones CLRFunciones CLR
La clase tiene que ser públicaLa clase tiene que ser pública
La función tiene que ser estáticaLa función tiene que ser estática
Parámetros por valor de tipo SqlTypesParámetros por valor de tipo SqlTypes
Pueden devolver un valor escalar o un conjunto dePueden devolver un valor escalar o un conjunto de
registrosregistros
namespace Math
{
public class Inverter
{
public static SqlInt32
Invert(SqlInt x)
{
return -x;
}
}
}
16. 1620/06/13 Introducción a SQL Server 2005
Registro de funcionesRegistro de funciones
CREATE FUNCTIONCREATE FUNCTION
Asignación de nombreAsignación de nombre
Parámetros posicionalesParámetros posicionales
CREATE FUNCTION DoInvert(@A int) returns int
As EXTERNAL NAME math.Math.Inverter.Invert
17. 1720/06/13 Introducción a SQL Server 2005
Uso de funciones CLRUso de funciones CLR
Como cualquier otra función T-SQLComo cualquier otra función T-SQL
18. 1820/06/13 Introducción a SQL Server 2005
ProcedimientosProcedimientos almacenados CLRalmacenados CLR
La clase tiene que ser públicaLa clase tiene que ser pública
La función tiene que ser estáticaLa función tiene que ser estática
Parámetros por valor y por referencia de tipo SqlTypesParámetros por valor y por referencia de tipo SqlTypes
Pueden devolver un valor entero o nadaPueden devolver un valor entero o nada
Pueden devolver un conjunto de registrosPueden devolver un conjunto de registros
Atributo SqlProcedureAtributo SqlProcedure
19. 1920/06/13 Introducción a SQL Server 2005
Registro de procedimientosRegistro de procedimientos
CREATE PROCEDURECREATE PROCEDURE
Asignación de nombreAsignación de nombre
Parámetros posicionalesParámetros posicionales
20. 2020/06/13 Introducción a SQL Server 2005
Triggers CLRTriggers CLR
La clase tiene que ser públicaLa clase tiene que ser pública
El método no devuelve ningún valorEl método no devuelve ningún valor
El método no admite parámetrosEl método no admite parámetros
21. 2120/06/13 Introducción a SQL Server 2005
Triggers CLRTriggers CLR
SqlTriggerContextSqlTriggerContext::
Las columnas que han cambiadoLas columnas que han cambiado
La acción que provocó elLa acción que provocó el triggertrigger
SqlContext.GetTriggerContextSqlContext.GetTriggerContext
SqlContext.GetCommandSqlContext.GetCommand::
Acceso aAcceso a deleteddeleted ee insertedinserted
AtributoAtributo SqlTriggerSqlTrigger::
NombreNombre
Tipo (after, instead of)Tipo (after, instead of)
Acción (insert, update, delete)Acción (insert, update, delete)
22. 2220/06/13 Introducción a SQL Server 2005
Registrar un trigger CLRRegistrar un trigger CLR
CREATE TRIGGERCREATE TRIGGER
CREATE TRIGGER EmailAudit
ON Users
FOR INSERT
AS
EXTERNAL NAME SQLCLRTest.testclrtrigger.EmailAudit
23. 2320/06/13 Introducción a SQL Server 2005
Tipos CLR definidos por el usuarioTipos CLR definidos por el usuario
Clase o estructuraClase o estructura
Serializable (nativo oSerializable (nativo o IBinarySerializableIBinarySerializable))
Convertible desde y hacia cadena (Convertible desde y hacia cadena (ParseParse(),(),
ToStringToString())())
Debe ser nulable (Debe ser nulable (INullable, IsNull, NullINullable, IsNull, Null))
24. 2420/06/13 Introducción a SQL Server 2005
Tipos CLR definidos por el usuarioTipos CLR definidos por el usuario
Atributo SqlUserDefinedTypeAtributo SqlUserDefinedType
Constructor vacíoConstructor vacío
Expone métodos y propiedades públicosExpone métodos y propiedades públicos
No soporta herenciaNo soporta herencia
Las variables y propiedades estáticas debenLas variables y propiedades estáticas deben
ser inmutablesser inmutables
25. 2520/06/13 Introducción a SQL Server 2005
Uso de los tipos CLRUso de los tipos CLR
Definición de columnas de tablasDefinición de columnas de tablas
Variables, Parámetros y expresionesVariables, Parámetros y expresiones
Índices (Índices (IsByteOrderedIsByteOrdered))
Métodos que modifican sólo enMétodos que modifican sólo en UPDATEUPDATE
SELECT thepoint.m_x, thepoint.m_y
FROM point_tab
go
-- use mutator
-- the name of mutator is case-sensitive!
UPDATE point_tab SET thepoint.SetXY(20, 30)
WHERE thepoint.m_x = 0
26. 2620/06/13 Introducción a SQL Server 2005
Registrar un tipo CLRRegistrar un tipo CLR
CREATE TYPECREATE TYPE
CREATE ASSEMBLY Point
FROM 'c:typesPoint.dll'
GO
CREATE TYPE PointCls
EXTERNAL NAME Point.PointCls
GO
27. 2720/06/13 Introducción a SQL Server 2005
Agregados CLRAgregados CLR
Funciones de agregadoFunciones de agregado
Realizan cálculos sobre un grupo deRealizan cálculos sobre un grupo de
registrosregistros
Requisitos:Requisitos:
Implementado como una claseImplementado como una clase
Contrato (Init, Accumulate, Merge, Terminate)Contrato (Init, Accumulate, Merge, Terminate)
Atributo SqlUserDefinedAggregateAtributo SqlUserDefinedAggregate
28. 2820/06/13 Introducción a SQL Server 2005
ContratoContrato
Sub Init()Sub Init()
Reinicializar el estado de la instanciaReinicializar el estado de la instancia
Llamado antes de cualquier otroLlamado antes de cualquier otro
Sub Accumulate( Value As InputSqlType)Sub Accumulate( Value As InputSqlType)
Modificar el estado para acumular el nuevo valorModificar el estado para acumular el nuevo valor
Llamado por cada registro del grupo o subgrupoLlamado por cada registro del grupo o subgrupo
Sub Merge( Value As ThisUdtaType)Sub Merge( Value As ThisUdtaType)
Combinar el acumulado de otro subgrupo con esteCombinar el acumulado de otro subgrupo con este
Llamado cuando el grupo se particiona en subgruposLlamado cuando el grupo se particiona en subgrupos
Function Terminate() As ResultSqlTypeFunction Terminate() As ResultSqlType
Devolver el resultado del cálculo del agregadoDevolver el resultado del cálculo del agregado
Llamado para obtener el resultadoLlamado para obtener el resultado
29. 2920/06/13 Introducción a SQL Server 2005
Atributo SqlUserDefinedAggregateAtributo SqlUserDefinedAggregate
Aplicado a la clase que implementa el UDAGAplicado a la clase que implementa el UDAG
Optimizador de consultas:Optimizador de consultas:
IsInvariantToDuplicatesIsInvariantToDuplicates
IsInvariantToNullsIsInvariantToNulls
IsInvariantToOrderIsInvariantToOrder
IsNullIfEmptyIsNullIfEmpty
Formato de serialización (Format)Formato de serialización (Format)
NativeNative
UserDefined (IBinarySerialize)UserDefined (IBinarySerialize)
30. 3020/06/13 Introducción a SQL Server 2005
Registro de agregados CLRRegistro de agregados CLR
CREATE AGGREGATECREATE AGGREGATE
-- UDAGGS are scoped to the database
CREATE AGGREGATE Concatenate
( @Value varchar(50) )
RETURNS varchar(8000)
EXTERNAL NAME AssemblyName.Namespace.Concatenate
31. 3120/06/13 Introducción a SQL Server 2005
Mejoras en T-SQLMejoras en T-SQL
Tipos de datos muy grandesTipos de datos muy grandes
Aislamiento snapshotAislamiento snapshot
Triggers DDLTriggers DDL
BULK INSERTBULK INSERT
Manejo de excepcionesManejo de excepciones
CTE’sCTE’s
PIVOT y UNPIVOTPIVOT y UNPIVOT
Funciones rankingFunciones ranking
CROSS APLYCROSS APLY
32. 3220/06/13 Introducción a SQL Server 2005
Tipos de datos muy grandesTipos de datos muy grandes
TEXT – VARCHAR(MAX)TEXT – VARCHAR(MAX)
NTEXT- NVARCHAR(MAX)NTEXT- NVARCHAR(MAX)
IMAGE – VARBINARY(MAX)IMAGE – VARBINARY(MAX)
Declaración de variablesDeclaración de variables
ConcatenaciónConcatenación
Funciones de cadenaFunciones de cadena
Actualizables directamenteActualizables directamente
33. 3320/06/13 Introducción a SQL Server 2005
Aislamiento snapshotAislamiento snapshot
Los lectores no bloquean a losLos lectores no bloquean a los
modificadoresmodificadores
Los modificadores no bloquean a losLos modificadores no bloquean a los
lectoreslectores
Varias versiones de las filasVarias versiones de las filas
Conflictos de concurrenciaConflictos de concurrencia
ALLOW_SNAPSHOT_ISOLATIONALLOW_SNAPSHOT_ISOLATION
SET TRANSACTION ISOLATION LEVELSET TRANSACTION ISOLATION LEVEL
SNAPSHOTSNAPSHOT
34. 3420/06/13 Introducción a SQL Server 2005
Triggers DDLTriggers DDL
Responden a instrucciones DDL (CREATE TABLE, ALTERResponden a instrucciones DDL (CREATE TABLE, ALTER
TABLE, etc)TABLE, etc)
Usos:Usos:
Prevenir y/o registrar cambios en el esquemaPrevenir y/o registrar cambios en el esquema
Realizar acciones personalizadasRealizar acciones personalizadas
CREATE TABLE ddl_log (data xml)
GO
-- Create Trigger
CREATE TRIGGER trig_create_tab
ON DATABASE
FOR CREATE_TABLE
AS
INSERT ddl_log VALUES (EVENTDATA())
GO
36. 3620/06/13 Introducción a SQL Server 2005
BULK INSERTBULK INSERT
Ahora es un proveedor OLEDBAhora es un proveedor OLEDB
-- insert-select syntax
INSERT Northwind.dbo.[Order Details]
-- bulk insert option
WITH (BULK_FIRE_TRIGGERS)
SELECT *
-- "bulk" rowset provider
-- special bulk insert options
FROM OPENROWSET (
BULK 'f:orderslineitem.tbl',
FIELDTERMINATOR = '|',
ROWTERMINATOR = ':n') as d
37. 3720/06/13 Introducción a SQL Server 2005
Manejo de excepcionesManejo de excepciones
Construcción TRY … CATCHConstrucción TRY … CATCH
Información del error:Información del error:
ERROR_MESSAGE()ERROR_MESSAGE()
ERROR_NUMBER()ERROR_NUMBER()
ERROR_SEVERITY()ERROR_SEVERITY()
@@ERROR@@ERROR
Errores de severidad >20 no pueden capturarseErrores de severidad >20 no pueden capturarse
Pueden anidarsePueden anidarse
XACT_STATE ()XACT_STATE ()
38. 3820/06/13 Introducción a SQL Server 2005
Sintaxis TRY … CATCHSintaxis TRY … CATCH
BEGIN TRY
-- Instrucciones que pueden fallar
END TRY
BEGIN CATCH
-- manejo del error
END CATCH
39. 3920/06/13 Introducción a SQL Server 2005
Common table expressionsCommon table expressions
Similar a una vista temporalSimilar a una vista temporal
Puede usarse en INSERT, UPDATE yPuede usarse en INSERT, UPDATE y
DELETEDELETE
WITH mid AS
(
SELECT ((MAX(value) - MIN(value)) / 2)
AS midval FROM invoices
)
SELECT
CASE
WHEN value > mid.midval THEN 0
ELSE 1
END AS half, invoices.*
FROM invoices, mid
ORDER BY half
40. 4020/06/13 Introducción a SQL Server 2005
Sintaxis de las CTE’sSintaxis de las CTE’s
Empiezan con WITHEmpiezan con WITH
Separadas por comasSeparadas por comas
Seguidas por una sentencia SELECT,Seguidas por una sentencia SELECT,
INSERT, UPDATE o DELETEINSERT, UPDATE o DELETE
WITH low AS (SELECT ((MAX(amount)) / 3)
AS v FROM invoices),
high AS (SELECT (2 * MAX(amount) / 3)
AS v FROM invoices)
SELECT id, amount, amount - low.v
FROM invoices, low, high
WHERE invoices.amount > low.v
AND invoices.amount <= high.v
41. 4120/06/13 Introducción a SQL Server 2005
Ejecución de las CTE’sEjecución de las CTE’s
Se evalúan sólo una vezSe evalúan sólo una vez
WITH low AS (SELECT ((max(amount)) / 3)
AS v FROM invoices),
high AS (SELECT (2 * max(amount) / 3)
AS v FROM invoices)
select id, amount, amount - low.v
FROM invoices, low, high
WHERE invoices.amount > low.v
AND invoices.amount <= high.v
SELECT id, amount,
amount - (SELECT (max(amount) / 3) FROM invoices)
FROM invoices where
amount > (SELECT (max(amount) / 3) FROM invoices) and
amount < (SELECT (2 * max(amount) / 3) FROM invoices)
42. 4220/06/13 Introducción a SQL Server 2005
Consultas recursivasConsultas recursivas
Tienen tres partes:Tienen tres partes:
Raíz, seguido por UNION ALL, realiza la inicializaciónRaíz, seguido por UNION ALL, realiza la inicialización
Miembro recursivo, se ejecuta hasta que no devuelva registrosMiembro recursivo, se ejecuta hasta que no devuelva registros
La sentencia SELECT externaLa sentencia SELECT externa
WITH descendant(parent, id, amount) AS
(SELECT parent, id, amount
FROM partsTree WHERE id = @start
UNION ALL
SELECT P.parent, P.id, P.amount
FROM partsTree AS P INNER JOIN
descendant AS A ON A.id = P.parent
)
SELECT id FROM descendant
Raíz, se ejecuta una vez
Miembro recursivo
Combinado con el
resultado anterior
Select externa
43. 4320/06/13 Introducción a SQL Server 2005
Ejemplo de CTE recursivaEjemplo de CTE recursiva
id parent
1 NULL
2 NULL
3 2
4 2
5 3
WITH descendant(parent, id, amount) AS
(SELECT parent, id, amount
FROM partsTree WHERE id = 2
UNION ALL
SELECT P.parent, P.id, P.amount
FROM partsTree AS P INNER JOIN
descendant AS A ON A.id = P.parent
)
SELECT id FROM descendant
2, 3, 4, 5
Tabla invoices
CTE recursiva
select externa
resultado
44. 4420/06/13 Introducción a SQL Server 2005
PIVOTPIVOT
Convierte filas en columnasConvierte filas en columnas
45. 4520/06/13 Introducción a SQL Server 2005
SELECT * FROM properties
PIVOT (
MAX(value)
FOR name IN
([color], [type], [amount
)
AS P
WHERE id IN
(SELECT id FROM products
WHERE name='Swish')
make column where
name = one of these
pivot column
select only properties
for the Swish product
value column
id color type amount
-- ------- -------- -------
1 blue oil 1 gal
3 red latex 1 qt
4 white oil 1 pt
pivoted properties of Swish product
id not mentioned
in pivot expression
properties grouped by id
46. 4620/06/13 Introducción a SQL Server 2005
Pivot y UnPivotPivot y UnPivot
Pivot convierte filas en columnasPivot convierte filas en columnas
Unpivot hace lo contrarioUnpivot hace lo contrario
--Create the table and insert values as portrayed in the above
example.
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
Emp3 int, Emp4 int, Emp5 int)
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4)
INSERT INTO pvt VALUES (2,4,1,5,5,5)
INSERT INTO pvt VALUES (3,4,3,5,4,4)
INSERT INTO pvt VALUES (4,4,2,5,5,4)
INSERT INTO pvt VALUES (5,5,1,5,5,5)
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM
(SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
FROM pvt) p
UNPIVOT
(Orders FOR Employee IN
(Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt
GO
VendorID Employee Orders
1 Emp1 4
1 Emp2 3
1 Emp3 5
1 Emp4 4
1 Emp5 4
2 Emp1 4
2 Emp2 1
2 Emp3 5
2 Emp4 5
2 Emp5 5
47. 4720/06/13 Introducción a SQL Server 2005
Funciones RANKINGFunciones RANKING
ROWNUMBER()ROWNUMBER()
RANK()RANK()
DENSERANK()DENSERANK()
NTILE()NTILE()
Pueden agruparse en particionesPueden agruparse en particiones
PARTITION BYPARTITION BY
48. 4820/06/13 Introducción a SQL Server 2005
Funciones RANKINGFunciones RANKINGorderid customerid num rank denserank tile5
----------- ---------- ------ ------ --------- ------
10308 ANATR 1 1 1 1
10365 ANTON 2 2 2 1
10355 AROUT 3 3 3 2
10383 AROUT 4 3 3 2
10278 BERGS 5 5 4 3
10280 BERGS 6 5 4 3
10384 BERGS 7 5 4 4
10265 BLONP 8 8 5 4
10297 BLONP 9 8 5 5
10360 BLONP 10 8 5 5
SELECT orderid, customerid,SELECT orderid, customerid,
ROW_NUMBER() OVER(ORDER BY customerid) AS num,ROW_NUMBER() OVER(ORDER BY customerid) AS num,
RANK() OVER(ORDER BY customerid) AS [rank],RANK() OVER(ORDER BY customerid) AS [rank],
DENSE_RANK() OVER(ORDER BY customerid) AS [denserank],DENSE_RANK() OVER(ORDER BY customerid) AS [denserank],
NTILE(5) OVER(ORDER BY customerid) AS ntile5NTILE(5) OVER(ORDER BY customerid) AS ntile5
FROM ordersFROM orders
SELECT orderid, customerid,SELECT orderid, customerid,
ROW_NUMBER() OVER(ORDER BY customerid) AS num,ROW_NUMBER() OVER(ORDER BY customerid) AS num,
RANK() OVER(ORDER BY customerid) AS [rank],RANK() OVER(ORDER BY customerid) AS [rank],
DENSE_RANK() OVER(ORDER BY customerid) AS [denserank],DENSE_RANK() OVER(ORDER BY customerid) AS [denserank],
NTILE(5) OVER(ORDER BY customerid) AS ntile5NTILE(5) OVER(ORDER BY customerid) AS ntile5
FROM ordersFROM orders
49. 4920/06/13 Introducción a SQL Server 2005
CROSS APPLY y OUTER APPLYCROSS APPLY y OUTER APPLY
Utilizadas para hacer joins con funcionesUtilizadas para hacer joins con funciones
tabularestabulares
Inner joinInner join
Outer JoinOuter Join
CREATE FUNCTION Greater(@v float,
@t float)
RETURNS TABLE AS
RETURN SELECT @v AS v
WHERE @v > @t
SELECT * FROM invoice
CROSS APPLY
Greater(invoice.amount, 1500)
50. 5020/06/13 Introducción a SQL Server 2005
XML y SQL Server 2005XML y SQL Server 2005
Tipo de dato XMLTipo de dato XML
Índices sobre campos XMLÍndices sobre campos XML
Gestión de esquemas XSDGestión de esquemas XSD
Consulta XQueryConsulta XQuery
Vistas XML (SQLXML)Vistas XML (SQLXML)
Mejoras en FOR XML y OPENXMLMejoras en FOR XML y OPENXML
51. 5120/06/13 Introducción a SQL Server 2005
XML y SQL Server 2005XML y SQL Server 2005
EsquemasEsquemas
Los campos XML pueden asociarse conLos campos XML pueden asociarse con
esquemasesquemas
CREATE TABLE Invoices(CREATE TABLE Invoices(
id INT PRIMARY KEY,id INT PRIMARY KEY,
factura XML(EsquemaFactura)factura XML(EsquemaFactura)
......
CREATE TABLE Invoices(CREATE TABLE Invoices(
id INT PRIMARY KEY,id INT PRIMARY KEY,
factura XML(EsquemaFactura)factura XML(EsquemaFactura)
......
Esquemas almacenados en la base de datosEsquemas almacenados en la base de datos
CREATE XML SCHEMA COLLECTION geocollCREATE XML SCHEMA COLLECTION geocoll
'<xs:schema ...'<xs:schema ...
targetNamespace=urn:geo>targetNamespace=urn:geo>
......
</xs:schema>'</xs:schema>'
CREATE XML SCHEMA COLLECTION geocollCREATE XML SCHEMA COLLECTION geocoll
'<xs:schema ...'<xs:schema ...
targetNamespace=urn:geo>targetNamespace=urn:geo>
......
</xs:schema>'</xs:schema>'
52. 5220/06/13 Introducción a SQL Server 2005
XML y SQL Server 2005XML y SQL Server 2005
Acceso a campos XMLAcceso a campos XML
XQUERYXQUERY
Standard W3C (Last Call Working Draft 4/4/2005)Standard W3C (Last Call Working Draft 4/4/2005)
Con extensiones para la actualizaciónCon extensiones para la actualización
Basado en XPathBasado en XPath
Mucha mayor riqueza para búsquedas complejasMucha mayor riqueza para búsquedas complejas
53. 5320/06/13 Introducción a SQL Server 2005
XML y SQL Server 2005XML y SQL Server 2005
XQuery desde T-SQLXQuery desde T-SQL
xml.query: devuelve un tipo XMLxml.query: devuelve un tipo XML
xml.exist: devuelve un booleano si hay resultadoxml.exist: devuelve un booleano si hay resultado
xml.value: devuelve un valor simple (escalar)xml.value: devuelve un valor simple (escalar)
xml.nodes: devuelve una tabla con una columnaxml.nodes: devuelve una tabla con una columna
xml.modifyxml.modify:: modifica el XMLmodifica el XML
SELECT id, xDoc.query(
'for $s in /doc[@id = 123]//sec[@num >= 3]
return <topic>{data($s/heading)}</topic>')
FROM docs
54. 5420/06/13 Introducción a SQL Server 2005
XML y SQL Server 2005XML y SQL Server 2005
T-SQL desde XQueryT-SQL desde XQuery
sql:variablesql:variable
Acceso a variables T-SQL desde XqueryAcceso a variables T-SQL desde Xquery
sql:columnsql:column
Acceso a la columna a la que pertenece el XMLAcceso a la columna a la que pertenece el XML
select CV.query(select CV.query(
'for $elem in /CV/DatosPersonales'for $elem in /CV/DatosPersonales
returnreturn
<Nombre><Nombre>
{ sql:column("Nombre") }{ sql:column("Nombre") }
</Nombre> '</Nombre> '
) from DatosPersonales) from DatosPersonales
select CV.query(select CV.query(
'for $elem in /CV/DatosPersonales'for $elem in /CV/DatosPersonales
returnreturn
<Nombre><Nombre>
{ sql:column("Nombre") }{ sql:column("Nombre") }
</Nombre> '</Nombre> '
) from DatosPersonales) from DatosPersonales
55. 5520/06/13 Introducción a SQL Server 2005
XML y SQL Server 2005XML y SQL Server 2005
ÍndicesÍndices
Pueden definirse índices en columnas XMLPueden definirse índices en columnas XML
Aceleran las sentencias XQueryAceleran las sentencias XQuery
Varios tipos de indexaciónVarios tipos de indexación
AtributosAtributos
ValoresValores
XPathXPath
57. 5720/06/13 Introducción a SQL Server 2005
Documentación disponibleDocumentación disponible
XML Options in Microsoft SQL Server 2005XML Options in Microsoft SQL Server 2005
Microsoft – Enero 2005 – 34 páginasMicrosoft – Enero 2005 – 34 páginas
http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?
pull=/library/en-us/dnsql90/html/sql2k5xmloptions.asppull=/library/en-us/dnsql90/html/sql2k5xmloptions.asp
XML Support in Microsoft SQL Server 2005XML Support in Microsoft SQL Server 2005
Shankar Pal, Mark Fussell, Irwin DolobowskyShankar Pal, Mark Fussell, Irwin Dolobowsky
Microsoft Corporation – Mayo 2004 – 39 páginasMicrosoft Corporation – Mayo 2004 – 39 páginas
http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?
pull=/library/en-us/dnsql90/html/sql2k5xml.asppull=/library/en-us/dnsql90/html/sql2k5xml.asp
59. 5920/06/13 Introducción a SQL Server 2005
Service BrokerService Broker
¿Qué es?¿Qué es?
Sistema de mensajería asíncronaSistema de mensajería asíncrona
Implementado 100% en SQL ServerImplementado 100% en SQL Server
DestinatariosDestinatarios
La misma BBDDLa misma BBDD
Otra BBDD en la misma instancia o en otra instanciaOtra BBDD en la misma instancia o en otra instancia
Otro servidor SQL Server remotoOtro servidor SQL Server remoto
IncluyeIncluye
Nuevos objetosNuevos objetos
Nuevas sentencias T-SQLNuevas sentencias T-SQL
Utilizado internamente en SQL Server 2005Utilizado internamente en SQL Server 2005
Query NotificationsQuery Notifications
Event NotificationsEvent Notifications
Lo pueden usar otras aplicacionesLo pueden usar otras aplicaciones
60. 6020/06/13 Introducción a SQL Server 2005
Mensajería asíncronaMensajería asíncrona
(¿Cómo dice?)(¿Cómo dice?)
Usamos una cola para:Usamos una cola para:
Que el proceso deje unQue el proceso deje un mensajemensaje en la cola yen la cola y
recupere inmediatamente el control del procesorecupere inmediatamente el control del proceso
((asincroníaasincronía))
El software de gestión de colas se encarga deEl software de gestión de colas se encarga de
gestionar la entrega de ese mensaje en su destinogestionar la entrega de ese mensaje en su destino
Con todos los matices adicionales (persistencia, garantía,Con todos los matices adicionales (persistencia, garantía,
secuencia, entrega única, transacción, trazabilidad…)secuencia, entrega única, transacción, trazabilidad…)
Esas son las diferencias con un socket TCPEsas son las diferencias con un socket TCP
El receptor puede procesar los mensajes a suEl receptor puede procesar los mensajes a su
conveniencia (con/sin prioridad, p.e.)conveniencia (con/sin prioridad, p.e.)
61. 6120/06/13 Introducción a SQL Server 2005
Service BrokerService Broker
MensajesMensajes
Unidad de comunicaciónUnidad de comunicación
Tres tiposTres tipos
BinariosBinarios
Solo cabeceraSolo cabecera
XML (tipados o sin tipar)XML (tipados o sin tipar)
CREATE MESSAGE TYPECREATE MESSAGE TYPE
[[//company.com/Expenses/SubmitExpense]//company.com/Expenses/SubmitExpense]]]
VALIDATION = VALID_XMLVALIDATION = VALID_XML
WITH SCHEMA COLLECTION invoice_xsdWITH SCHEMA COLLECTION invoice_xsd
CREATE MESSAGE TYPECREATE MESSAGE TYPE
[[//company.com/Expenses/SubmitExpense]//company.com/Expenses/SubmitExpense]]]
VALIDATION = VALID_XMLVALIDATION = VALID_XML
WITH SCHEMA COLLECTION invoice_xsdWITH SCHEMA COLLECTION invoice_xsd
62. 6220/06/13 Introducción a SQL Server 2005
Service BrokerService Broker
ContratosContratos
Define los mensajes que se puedenDefine los mensajes que se pueden
intercambiarintercambiar
CREATE CONTRACTCREATE CONTRACT
[//company.com/Expenses/ExpenseSubmission][//company.com/Expenses/ExpenseSubmission]
((
[//company.com/Expenses/SubmitExpense][//company.com/Expenses/SubmitExpense]
SENT BY INITIATOR,SENT BY INITIATOR,
[//company.com/Expenses/ApprovedOrDenied][//company.com/Expenses/ApprovedOrDenied]
SENT BY TARGET,SENT BY TARGET,
[//company.com/Expenses/ExpenseReimbursed][//company.com/Expenses/ExpenseReimbursed]
SENT BY TARGETSENT BY TARGET
))
CREATE CONTRACTCREATE CONTRACT
[//company.com/Expenses/ExpenseSubmission][//company.com/Expenses/ExpenseSubmission]
((
[//company.com/Expenses/SubmitExpense][//company.com/Expenses/SubmitExpense]
SENT BY INITIATOR,SENT BY INITIATOR,
[//company.com/Expenses/ApprovedOrDenied][//company.com/Expenses/ApprovedOrDenied]
SENT BY TARGET,SENT BY TARGET,
[//company.com/Expenses/ExpenseReimbursed][//company.com/Expenses/ExpenseReimbursed]
SENT BY TARGETSENT BY TARGET
))
63. 6320/06/13 Introducción a SQL Server 2005
Service BrokerService Broker
ColasColas
Puntos de entrada a los serviciosPuntos de entrada a los servicios
Pueden leerse desde T-SQLPueden leerse desde T-SQL
Pueden llamar a un procedimientoPueden llamar a un procedimiento
CREATE QUEUE ExpenseQueueCCREATE QUEUE ExpenseQueueC
WITH STATUS = ONWITH STATUS = ON
ACTIVATION (ACTIVATION (
PROCEDURE_NAME = expense_activation,PROCEDURE_NAME = expense_activation,
MAX_QUEUE_READERS = 5,MAX_QUEUE_READERS = 5,
EXECUTE_AS USER = 'sa')EXECUTE_AS USER = 'sa')
CREATE QUEUE ExpenseQueueCCREATE QUEUE ExpenseQueueC
WITH STATUS = ONWITH STATUS = ON
ACTIVATION (ACTIVATION (
PROCEDURE_NAME = expense_activation,PROCEDURE_NAME = expense_activation,
MAX_QUEUE_READERS = 5,MAX_QUEUE_READERS = 5,
EXECUTE_AS USER = 'sa')EXECUTE_AS USER = 'sa')
64. 6420/06/13 Introducción a SQL Server 2005
Service BrokerService Broker
ServiciosServicios
Funcionalidad expuesta en las colasFuncionalidad expuesta en las colas
Compuesto porCompuesto por
Una colaUna cola
Varios contratosVarios contratos
CREATE SERVICE [//company.com/Expenses]CREATE SERVICE [//company.com/Expenses]
ON ExpenseQueueON ExpenseQueue
([//company.com/Expenses/ExpenseSubmission],([//company.com/Expenses/ExpenseSubmission],
[//company.com/Expenses/ExpenseProcessing])[//company.com/Expenses/ExpenseProcessing])
CREATE SERVICE [//company.com/Expenses]CREATE SERVICE [//company.com/Expenses]
ON ExpenseQueueON ExpenseQueue
([//company.com/Expenses/ExpenseSubmission],([//company.com/Expenses/ExpenseSubmission],
[//company.com/Expenses/ExpenseProcessing])[//company.com/Expenses/ExpenseProcessing])
65. 6520/06/13 Introducción a SQL Server 2005
Service BrokerService Broker
Envío de mensajesEnvío de mensajes
1.- Creación del diálogo1.- Creación del diálogo
Un diálogo ordena y correlaciona los mensajesUn diálogo ordena y correlaciona los mensajes
2.- Envío del mensaje2.- Envío del mensaje
Mediante comando SENDMediante comando SEND
SET @ExpenseReport = “<report>…</report>”;SET @ExpenseReport = “<report>…</report>”;
BEGIN DIALOG @dialog_handleBEGIN DIALOG @dialog_handle
FROM SERVICE [//Adventure-Works.com/Expenses/ExpenseClient]FROM SERVICE [//Adventure-Works.com/Expenses/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseProcessing] ;ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseProcessing] ;
SEND ON CONVERSATION @dialog_handleSEND ON CONVERSATION @dialog_handle
MESSAGE TYPE [//Adventure-Works.com/Expenses/SubmitExpense]MESSAGE TYPE [//Adventure-Works.com/Expenses/SubmitExpense]
(@ExpenseReport) ;(@ExpenseReport) ;
SET @ExpenseReport = “<report>…</report>”;SET @ExpenseReport = “<report>…</report>”;
BEGIN DIALOG @dialog_handleBEGIN DIALOG @dialog_handle
FROM SERVICE [//Adventure-Works.com/Expenses/ExpenseClient]FROM SERVICE [//Adventure-Works.com/Expenses/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseProcessing] ;ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseProcessing] ;
SEND ON CONVERSATION @dialog_handleSEND ON CONVERSATION @dialog_handle
MESSAGE TYPE [//Adventure-Works.com/Expenses/SubmitExpense]MESSAGE TYPE [//Adventure-Works.com/Expenses/SubmitExpense]
(@ExpenseReport) ;(@ExpenseReport) ;
66. 6620/06/13 Introducción a SQL Server 2005
Service BrokerService Broker
Recepción de mensajesRecepción de mensajes
Comando RECEIVEComando RECEIVE
Especifica la cola y el diálogoEspecifica la cola y el diálogo
Es posible quedar a la espera con WAITFOREs posible quedar a la espera con WAITFOR
WAITFOR (WAITFOR (
RECEIVE *RECEIVE *
FROM ExpenseQueue),FROM ExpenseQueue),
TIMEOUT 60000TIMEOUT 60000
WAITFOR (WAITFOR (
RECEIVE *RECEIVE *
FROM ExpenseQueue),FROM ExpenseQueue),
TIMEOUT 60000TIMEOUT 60000