Title: SQL Server 2005
1 SQL Server 2005
David Carmona Development Advisor Microsoft
Ibérica davidcsa_at_microsoft.com www.gruposdeusuario
s.net
2Agenda
- Qué hay de nuevo?
- IntegraciĂłn con .NET
- XML y SQL Server 2005
- Service Broker
- Mejoras en ADO.NET
- Mejoras en T-SQL
3 4Qué hay de nuevo?
- .NET Framework
- Common Language Runtime Integration
- User-defined Aggregates
- User-defined Data Types
- User-defined Functions
- SQL Server .NET Data Provider
- Extended Triggers
- Data Types
- FileStream Storage Attribute
- Managed SQL Types
- New XML Datatype
- SQL Server Engine
- New Message Service Broker
- HTTP Support (Native HTTP)
- Database Tuning Advisor
- Enhanced Read ahead scan
- Extended Indexes
- Multiple Active Result Sets
- Persisted Computed Columns
- Database Maintenance
- Backup and Restore Enhancements
- Checksum Integrity Checks
- Dedicated Administrator Connection
- Dynamic AWE
- Fast Recovery
- Highly-available Upgrade
- Online Index Operations
- Online Restore
- Parallel DBCC
- Parallel Index Operations
- Management Tools
- MDX Query Editor
- MDX Intellisense
- T-SQL Intellisense
- Version Control Support
- XML/A
- SQLCMD Command Line Tool
- Performance Tuning
- Replication
- Auto-tuning Replication Agents
- Oracle Publication
- Improved Blob Change Tracking
- OLAP and Data Mining
- Analysis Management Objects
- Windows Integrated Backup and Restore
- Web Service/XML for Analysis
- DTS and DM Integration
- Eight new DM algorithms
- Auto Packaging and Deployment
- Data Transformation Services
- New Architecture (DTR DTP)
- Complex Control Flows
- Control Flow Debugging
- For Each Enumerations
- Property Mappings
- Full Data Flow Designer
- Full DTS Control Flow Designer
5Qué hay de nuevo?Contexto
Otros servicios
Otros servicios
XML
Servicios Web
Formularios Web
XML
Browsers estándar
LĂłgica aplicaciĂłn
Clientes inteligentes
Servicios SO
Servicios building blocks
XML
Dispositivos mĂłviles
6Qué hay de nuevo?Contexto
Otros servicios
Otros servicios
XML
Servicios Web
Formularios Web
XML
Browsers estándar
LĂłgica aplicaciĂłn
Clientes inteligentes
Servicios SO
Servicios building blocks
XML
Dispositivos mĂłviles
7 8IntegraciĂłn con .NETAlternativa a T-SQL
T-SQL
Lenguajes .NET
Funciones definidas por el usuario
Procedimientos almacenados
Triggers
Tipos definidos por el usuario
Aggregates
9IntegraciĂłn con .NETCreaciĂłn
- Registro de assemblies
- Almacenados en la base de datos
CREATE ASSEMBLY NombreAssembly FROM
c\assembly.dll
- Referencias
- Se almacenan automáticamente
- Sólo dependencias que no estén en la GAC
10IntegraciĂłn con .NETCreaciĂłn (II)
- DefiniciĂłn de
- UDFs, procedimientos almacenados, triggers
- Enlazando a función estática y pública
- UDTs, aggregates
- Enlazando a clase
CREATE FUNCTION NombreFuncion () RETURNS int AS
EXTERNAL NAME NombreAssembly.clasefuncion
11FunciĂłn de usuario
12IntegraciĂłn con .NETAcceso a datos
- Proveedor ADO.NET inprocess
- Cadena de conexiĂłn
- context connection true
- Acceso al contexto con SqlContext
- Pipe
- Estado servidor
- Tablas triggers
- PeticiĂłn
- Cursores de servidor
- CreaciĂłn de metadatos en tiempo de ejecuciĂłn
13Procedimiento almacenado
14IntegraciĂłn con .NETCĂłmo funciona?
- SQL Server hospeda al CLR
- CĂłdigo .NET corriendo en el mismo proceso
- Bueno, esto es fácil
- Todos lo hemos visto desde VB6
- y qué pasa con?
- Carga de assemblies
- GestiĂłn de la memoria
- Condiciones excepcionales
- Hilos
- Seguridad
15IntegraciĂłn con .NETImplementaciĂłn
- Dos interfaces en CLR
- ICorRuntimeHost
- ICLRRuntimeHost (nuevo)
- ICLRRuntimeHost es más potente
- GetHostManager devuelve array de punteros a
funciĂłn - Permite interceptar casi todo
- Carga de assemblies, locks, hilos, memoria,
completion ports
16IntegraciĂłn con .NETSeguridad
- CAS deja de tener validez
- Tres nuevos niveles gestionados por SQL
- Safe
- External
- Unsafe
- Validados al dar de alta el assembly
- Ej. Referencias, type safe, mutable statics
- Llamadas al BCL restringidas en runtime
- Nuevo atributo HostProtectionAttribute
17La prueba
18 19XML y SQL Server 2005Nuevo tipo XML
- Almacena documentos XML
- ValidaciĂłn well-formed y XSD
- Escenarios
- InformaciĂłn compleja
- Datos semiestructurados
- GestiĂłn documental (ej. email)
- Intercambio de documentos (B2B, B2C)
- MensajerĂa (SOAP)
20XML y SQL Server 2005Esquemas
- Los campos XML pueden asociarse con esquemas
CREATE TABLE Invoices( id INT PRIMARY
KEY, factura XML(EsquemaFactura) ...
- Esquemas almacenados en la base de datos
CREATE XML SCHEMA COLLECTION geocoll 'ltxsschema
... targetNamespaceurngeogt ... lt/xsschemagt'
21XML y SQL Server 2005Acceso a campos XML
- XQUERY
- Standard W3C
- Con extensiones para la actualizaciĂłn
- Basado en XPath
- Mucha mayor riqueza para bĂşsquedas complejas
for s in /doc_at_id 123//sec_at_num gt 3 return
lttopicgtdata(s/heading)lt/topicgt
22XML y SQL Server 2005XQuery desde T-SQL
- xml.query devuelve un tipo XML
- xml.value devuelve un escalar
- xml.exist devuelve un bool si hay resultado
- xml.nodes devuelve una tabla con una columna
- xml.modify modifica el XML
SELECT id, xDoc.query( 'for s in /doc_at_id
123//sec_at_num gt 3 return lttopicgtdata(s/headin
g)lt/topicgt') FROM docs
23XML y SQL Server 2005T-SQL desde XQuery
- sqlvariable
- Acceso a variables T-SQL desde Xquery
- sqlcolumn
- Acceso a la columna a la que pertenece el XML
select CV.query( 'for elem in /CV/DatosPersonales
return ltNombregt sqlcolumn("Nombre")
lt/Nombregt ' ) from DatosPersonales
24XML y SQL Server 2005Indices
- Pueden definirse Ăndices en columnas XML
- Aceleran las sentencias XQuery
- Cuatro tipos
- PRIMARY Indexa los nodos por path
- /empleado_at_edad
- PATH Indexa por (path, valor)
- /empleado_at_edad 28
- VALUE Indexa por (valor, path)
- //direccion/ciudad Huelva
- PROPERTY Indexa por (PK, path, valor)
- SELECT xCol.value(/empleado_at_edad)
25XML y SQL Server 2005
26 27Service BrokerQué es?
- Sistema de mensajerĂa asĂncrona
- Implementado 100 en SQL Server
- Incluye
- Nuevos objetos
- Nuevas sentencias T-SQL
- Usado internamente
- Query Notifications
- Event Notifications
- Puede usarse por las aplicaciones
28Service BrokerY con Ă©ste ya van 4
- MSMQ
- Necesita usar DTC para transaccionalidad con BD
- No garantiza ordenamiento de mensajes
- Complica las operaciones
- No permite mensajes tipados en XML con XSD
- Biztalk messaging
- Incorpora orquestaciĂłn
- Indigo messaging
- Es interoperable
29Service BrokerMensajes
- Unidad de comunicaciĂłn
- Tres tipos
- Binarios
- Cabecera
- XML (tipados o sin tipar)
CREATE MESSAGE TYPE http//www.company.com/messag
es/Invoice VALIDATION VALID_XML WITH
SCHEMA COLLECTION invoice_xsd
30Service BrokerContratos
- Define los mensajes que se pueden intercambiar
CREATE CONTRACT //company.com/Expenses/ExpenseS
ubmission ( //company.com/Expenses/Submi
tExpense SENT BY INITIATOR,
//company.com/Expenses/ApprovedOrDenied
SENT BY TARGET, //company.com/Expenses/Expens
eReimbursed SENT BY ANY )
31Service BrokerColas
- Puntos de entrada a los servicios
- Pueden leerse desde T-SQL
- Pueden llamar a un procedimiento
CREATE QUEUE ExpenseQueueC WITH STATUS ON
ACTIVATION ( PROCEDURE_NAME
expense_activation, MAX_QUEUE_READERS 5,
EXECUTE_AS USER 'sa')
32Service BrokerServicios
- Funcionalidad expuesta en las colas
- Compuesto por
- Una cola
- Varios contratos
CREATE SERVICE //develop.com/Expenses ON
ExpenseQueue (//develop.com/Expenses/ExpenseSu
bmission, //develop.com/Expenses/ExpenseProce
ssing)
33Service BrokerEnvĂo de mensajes
- 1.- Creación del diálogo
- Un diálogo ordena y correlaciona los mensajes
- 2.- EnvĂo del mensaje
- Mediante comando SEND
SET _at_ExpenseReport ltreportgtlt/reportgt BEGIN
DIALOG _at_dialog_handle FROM SERVICE
//Adventure-Works.com/Expenses/ExpenseClient TO
SERVICE '//Adventure-Works.com/Expenses' ON
CONTRACT //Adventure-Works.com/Expenses/ExpensePr
ocessing SEND ON CONVERSATION _at_dialog_handle
MESSAGE TYPE //Adventure-Works.com/Expenses/Su
bmitExpense (_at_ExpenseReport)
34Service BrokerRecepciĂłn de mensajes
- Comando RECEIVE
- Especifica la cola y el diálogo
- Es posible quedar a la espera con WAITFOR
WAITFOR ( RECEIVE FROM ExpenseQueue),
TIMEOUT 60000
35- Mejoras en ADO.NET
- para SQL Server 2005
36Mejoras en ADO.NETDependencias SQL
- NotificaciĂłn cuando cambia un resultset
- Útil para invalidar caché o vistas
- Basado en Service Broker
- SqlNotificationRequest
- Recibe un objeto comando y un servicio
- EnvĂa un mensaje al servicio cuando cambia el
resultset - SqlDependency
- Abstrae el Service Broker
- Evento OnChanged
37Notificaciones
38Mejoras en ADO.NETMARS
- Múltiples resultsets y transacciones simultáneas
por conexiĂłn
SqlCommand cmd new SqlCommand("select from
authors",conn) SqlCommand cmd2 new
SqlCommand("select from jobs",conn) conn.Open()
SqlDataReader rdr cmd.ExecuteReader() SqlDat
aReader rdr2 cmd2.ExecuteReader() rdr2.Read()
rdr.Read()
39Mejoras en ADO.NETTransacciones
- System.Transactions
- API manejada para definir transacciones
- Sin COM!!!!!
- Promotable
- Comienza como local (10 ms)
- Sigue local en accesos a SQL Server 2005
- SĂłlo se promueve a DTC si
- Se accede a SQL Server 2000, MSMQ, Oracle
- Se acceden a dos SQL Server 2005
40Mejoras en ADO.NETTransacciones (2)
using (TransactionScope ts new
TransactionScope()) SqlConnection conn1 new
SqlConnection( "server.integrated
securitysspidatabasepubs")) // Local tx si
SQL 2005, si no distribuida conn1.Open()
SqlCommand cmd1 new SqlCommand( "INSERT
jobs 'job1', 10, 10", conn1)
cmd1.ExecuteNonQuery() SqlConnection conn2
new SqlConnection( "serverotherintegrated
securitysspidatabasepubs")) // prmueve a
distribuida conn2.Open() SqlCommand cmd2
new SqlCommand( "INSERT jobs 'job2', 10,
10", conn2) cmd2.ExecuteNonQuery()
ts.Consistent true // commit transaction
41Transacciones
42 43Mejoras en T-SQLControl de excepciones
- Se acabĂł el acceso a _at__at_ERROR
- Bloques TRYCATCH
- Anidables
- Nuevas funciones disponibles en el CATCH
- ERROR_NUMBER, ERROR_MESSAGE
BEGIN TRY SELECT FROM authors END TRY
BEGIN CATCH SELECT ERROR_NUMBER() END CATCH
44Mejoras en T-SQLCommon Table Expressions
- Resultset temporal
- SĂłlo vive en la sentencia actual
WITH mid AS ( SELECT (MAX(ListPrice)
MIN(ListPrice))/2 as midval from
production.product ) SELECT FROM
Production.Product, mid WHERE ListPrice gt midval
- Mejor que las subqueries si hay varias iguales
- Permite recursiĂłn
45Mejoras en T-SQLRanking
- Añade una columna basada en ratings
- ROW_NUMBER
- RANK
- DENSE_RANK
- NTILE (n)
- Pueden agruparse en particiones
- PARTITION BY
46Mejoras en T-SQLRanking (2)
SELECT orderid, customerid, ROW_NUMBER()
OVER(ORDER BY customerid) AS num, RANK()
OVER(ORDER BY customerid) AS rank,
DENSE_RANK() OVER(ORDER BY customerid) AS
denserank, NTILE(5) OVER(ORDER BY
customerid) AS ntile5 FROM orders
orderid 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
47Mejoras en T-SQLOtras
- Pivot
- Convierte filas a columnas
- OUTPUT
- Permite especificar una salida a sentencias de
actualizaciĂłn distinta al nĂşmero de filas - Ej. Registros borrados, identities, etc.
- Tipos varchar, nvarchar, binary (max)
- Aislamiento snapshot
- Escritores no bloquean a lectores
48Mejoras en T-SQLOtras (2)
- APPLY
- VersiĂłn de JOIN pensada para UDFs
- Los parámetros pueden ser otras columnas
SELECT FROM invoice CROSS APPLY
greater(amount, 1500)
- TOP
- Permite expresiones
- También para actualizaciones
49Snapshot
50(No Transcript)