SlideShare una empresa de Scribd logo
1 de 61
SQL Server 2005SQL Server 2005
Jordi RamblaJordi Rambla
CertiaCertia
Microsoft MVPMicrosoft MVP
jordi@ramblainf.comjordi@ramblainf.com
Yo (Jordi Rambla – jordi@ramblainf.com)Yo (Jordi Rambla – jordi@ramblainf.com)
Director técnico de CertiaDirector técnico de Certia
Consultor y profesor de Reporting y BIConsultor y profesor de Reporting y BI
Mentor Asociado de Solid Quality LearningMentor Asociado de Solid Quality Learning
IberoamericanaIberoamericana
MVP SQL ServerMVP SQL Server
Regional Director de MicrosoftRegional Director de Microsoft circacirca1997-20041997-2004
Consultor de P&P,XML, ES y WS en Ciclo .NET UOCConsultor de P&P,XML, ES y WS en Ciclo .NET UOC
Certia (http://certia.ramblainf.com)Certia (http://certia.ramblainf.com)
Es la marca de servicios de rambla informàticaEs la marca de servicios de rambla informàtica
Consultoría, formación y aplicaciones en BI y .NETConsultoría, formación y aplicaciones en BI y .NET
Trabajando en informática empresarial desde 1985Trabajando en informática empresarial desde 1985
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 .Net conAyudando a obtener lo mejor de SQLServer y .Net con
FormaciónFormación
ConsultoríaConsultoría
MentoringMentoring
Solid Quality Learning University SummitsSolid Quality Learning University Summits
¿Qué son los SQL University Summits?¿Qué son los SQL University Summits?
Intensos, avanzados, esencialmente útilesIntensos, avanzados, esencialmente útiles
Temarios aplicados a sistemas empresarialesTemarios aplicados a sistemas empresariales
Eventos formativos, no de marketingEventos formativos, no de marketing
2 grupos de sesiones simultáneas2 grupos de sesiones simultáneas
4 seminarios de día completo4 seminarios de día completo
9 mentores presentando 28 sesiones9 mentores presentando 28 sesiones
En castellanoEn castellano
¿Dónde?¿Dónde?
Madrid (del 25 al 29 de Abril del 2005)Madrid (del 25 al 29 de Abril del 2005)
Barcelona (¿2005?); tBarcelona (¿2005?); también en:ambién en:
Milán, Washington DC, Los Angeles, Chicago, Dallas, Monterrey, San Salvador,Milán, Washington DC, Los Angeles, Chicago, Dallas, Monterrey, San Salvador,
Singapore, Hong KongSingapore, Hong Kong
AgendaAgenda
¿Qué hay de nuevo?¿Qué hay de nuevo?
Integración con .NETIntegración con .NET
XML y SQL Server 2005XML y SQL Server 2005
Service BrokerService Broker
Mejoras en T-SQLMejoras en T-SQL
Mejoras en ADO.NETMejoras en ADO.NET
¿Qué hay de nuevo?¿Qué hay de nuevo?
¿Qué hay de nuevo?¿Qué hay de nuevo?
.NET Framework.NET Framework
Common Language Runtime IntegrationCommon Language Runtime Integration
User-defined AggregatesUser-defined Aggregates
User-defined Data TypesUser-defined Data Types
User-defined FunctionsUser-defined Functions
SQL Server .NET Data ProviderSQL Server .NET Data Provider
Extended TriggersExtended Triggers
Data TypesData Types
FileStream Storage AttributeFileStream Storage Attribute
Managed SQL TypesManaged SQL Types
New XML DatatypeNew XML Datatype
SQL Server EngineSQL Server Engine
New Message Service BrokerNew Message Service Broker
HTTP Support (Native HTTP)HTTP Support (Native HTTP)
Database Tuning AdvisorDatabase Tuning Advisor
Enhanced Read ahead & scanEnhanced Read ahead & scan
Extended IndexesExtended Indexes
Multiple Active Result SetsMultiple Active Result Sets
Persisted Computed ColumnsPersisted Computed Columns
Queuing SupportQueuing Support
Snapshot Isolation LevelSnapshot Isolation Level
Scale Up PartitioningScale Up Partitioning
VIA supportVIA support
NUMA supportNUMA support
Database Failure and RedundancyDatabase Failure and Redundancy
Fail-over Clustering (up to 8 node)Fail-over Clustering (up to 8 node)
Enhanced Multi-instance SupportEnhanced Multi-instance Support
Database MirroringDatabase Mirroring
Database ViewpointsDatabase Viewpoints
XMLXML
XQUERY Support (Server & Mid Tier)XQUERY Support (Server & Mid Tier)
XML Data Manipulation LanguageXML Data Manipulation Language
FOR XML EnhancementsFOR XML Enhancements
XML Schema (XSD) SupportXML Schema (XSD) Support
MSXML 6.0 (Native)MSXML 6.0 (Native)
.Net XML Framework.Net XML Framework
Database MaintenanceDatabase Maintenance
Backup and Restore EnhancementsBackup and Restore Enhancements
Checksum Integrity ChecksChecksum Integrity Checks
Dedicated Administrator ConnectionDedicated Administrator Connection
Dynamic AWEDynamic AWE
Fast RecoveryFast Recovery
Highly-available UpgradeHighly-available Upgrade
Online Index OperationsOnline Index Operations
Online RestoreOnline Restore
Parallel DBCCParallel DBCC
Parallel Index OperationsParallel Index Operations
Management ToolsManagement Tools
MDX Query EditorMDX Query Editor
MDX IntellisenseMDX Intellisense
T-SQL IntellisenseT-SQL Intellisense
Version Control SupportVersion Control Support
XML/AXML/A
SQLCMD Command Line ToolSQLCMD Command Line Tool
Performance TuningPerformance Tuning
Profiler EnhancementsProfiler Enhancements
Profiling Analysis ServicesProfiling Analysis Services
Exportable ShowplanExportable Showplan
Exportable Deadlock TracesExportable Deadlock Traces
Full-text SearchFull-text Search
Indexing of XML DatatypeIndexing of XML Datatype
MDACMDAC
Side by Side installationSide by Side installation
Microsoft Installer base setupMicrosoft Installer base setup
Support for Active Directory DeploymentSupport for Active Directory Deployment
SQL Client .NET Data ProviderSQL Client .NET Data Provider
Server Cursor SupportServer Cursor Support
AsynchAsynch
SecuritySecurity
All Permissions GrantableAll Permissions Grantable
Fine Grain Administration RightsFine Grain Administration Rights
Separation of Users and SchemaSeparation of Users and Schema
ReplicationReplication
Auto-tuning Replication AgentsAuto-tuning Replication Agents
Oracle PublicationOracle Publication
Improved Blob Change TrackingImproved Blob Change Tracking
OLAP and Data MiningOLAP and Data Mining
Analysis Management ObjectsAnalysis Management Objects
Windows Integrated Backup and RestoreWindows Integrated Backup and Restore
Web Service/XML for AnalysisWeb Service/XML for Analysis
DTS and DM IntegrationDTS and DM Integration
Eight new DM algorithmsEight new DM algorithms
Auto Packaging and DeploymentAuto Packaging and Deployment
Data Transformation ServicesData Transformation Services
New Architecture (DTR + DTP)New Architecture (DTR + DTP)
Complex Control FlowsComplex Control Flows
Control Flow DebuggingControl Flow Debugging
For Each EnumerationsFor Each Enumerations
Property MappingsProperty Mappings
Full Data Flow DesignerFull Data Flow Designer
Full DTS Control Flow DesignerFull DTS Control Flow Designer
Graphical Presentation of Pkg ExecutionGraphical Presentation of Pkg Execution
Immediate Mode and Project ModeImmediate Mode and Project Mode
Package (Advanced) Deployment ToolsPackage (Advanced) Deployment Tools
Custom Tasks and TransformationsCustom Tasks and Transformations
Reporting ServicesReporting Services
Multiple Output FormatsMultiple Output Formats
Parameters (Static, Dynamic, Hierarchical)Parameters (Static, Dynamic, Hierarchical)
Bulk Delivery of Personalized ContentBulk Delivery of Personalized Content
Support Multiple Data SourcesSupport Multiple Data Sources
STS (Web Parts, Doc Libraries)STS (Web Parts, Doc Libraries)
Visual Design ToolVisual Design Tool
Charting, Sorting, Filtering, Drill-ThroughCharting, Sorting, Filtering, Drill-Through
Scheduling, CachingScheduling, Caching
Complete Scripting EngineComplete Scripting Engine
Scale Out architectureScale Out architecture
Open XML Report DefinitionOpen XML Report Definition
Notification ServicesNotification Services
OtrosOtros
serviciosservicios
OtrosOtros
serviciosservicios
¿Qué hay de nuevo?¿Qué hay de nuevo?
ContextoContexto
OSOS
ServicesServices
BizBiz
Tier LogicTier Logic
BizBiz
Tier LogicTier Logic
Servicios SOServicios SOServicios SOServicios SO
XMLXML
XMLXML
XML
XML
HTMLHTML
XMLXML
XMLXML
BrowsersBrowsers
estándarestándar
BrowsersBrowsers
estándarestándar
DispositivosDispositivos
móvilesmóviles
DispositivosDispositivos
móvilesmóviles
ClientesClientes
inteligentesinteligentes
ClientesClientes
inteligentesinteligentes
Lógica aplicaciónLógica aplicaciónLógica aplicaciónLógica aplicación
ServiciosServicios
WebWeb
ServiciosServicios
WebWeb
OtrosOtros
serviciosservicios
OtrosOtros
serviciosservicios
ServiciosServicios
building blocksbuilding blocks
ServiciosServicios
building blocksbuilding blocks
FormulariosFormularios
WebWeb
FormulariosFormularios
WebWeb
ServiciosServicios
building blocksbuilding blocks
ServiciosServicios
building blocksbuilding blocks
OtrosOtros
serviciosservicios
OtrosOtros
serviciosservicios
OtrosOtros
serviciosservicios
OtrosOtros
serviciosservicios
¿Qué hay de nuevo?¿Qué hay de nuevo?
ContextoContexto
OSOS
ServicesServices
BizBiz
Tier LogicTier Logic
BizBiz
Tier LogicTier Logic
Servicios SOServicios SOServicios SOServicios SO
XMLXML
XMLXML
XML
XML
HTMLHTML
XMLXML
XMLXML
BrowsersBrowsers
estándarestándar
BrowsersBrowsers
estándarestándar
DispositivosDispositivos
móvilesmóviles
DispositivosDispositivos
móvilesmóviles
ClientesClientes
inteligentesinteligentes
ClientesClientes
inteligentesinteligentes
Lógica aplicaciónLógica aplicaciónLógica aplicaciónLógica aplicación
ServiciosServicios
WebWeb
ServiciosServicios
WebWeb
FormulariosFormularios
WebWeb
FormulariosFormularios
WebWeb
Integración con .NETIntegración con .NET
Integración con .NETIntegración con .NET
Alternativa a T-SQLAlternativa a T-SQL
FuncionesFunciones
definidas por eldefinidas por el
usuariousuario
ProcedimientosProcedimientos
almacenadosalmacenados
TriggersTriggers
Tipos definidosTipos definidos
por el usuariopor el usuario
AggregatesAggregates
T-SQLT-SQL
LenguajesLenguajes
.NET.NET
Integración con .NETIntegración con .NET
CreaciónCreación
Registro de assembliesRegistro de assemblies
Almacenados en la base de datosAlmacenados en la base de datos
CREATE ASSEMBLYCREATE ASSEMBLY NombreAssemblyNombreAssembly FROMFROM c:assembly.dllc:assembly.dllCREATE ASSEMBLYCREATE ASSEMBLY NombreAssemblyNombreAssembly FROMFROM c:assembly.dllc:assembly.dll
ReferenciasReferencias
Se almacenan automáticamenteSe almacenan automáticamente
Sólo dependencias que no estén en la GACSólo dependencias que no estén en la GAC
Integración con .NETIntegración con .NET
Creación (II)Creación (II)
Definición de:Definición de:
UDFs, procedimientos almacenados, triggersUDFs, procedimientos almacenados, triggers
Enlazando a función estática y públicaEnlazando a función estática y pública
UDTs, aggregatesUDTs, aggregates
Enlazando a claseEnlazando a clase
CREATE FUNCTIONCREATE FUNCTION NombreFuncionNombreFuncion () RETURNS int() RETURNS int
AS EXTERNAL NAMEAS EXTERNAL NAME NombreAssembly.[clase]:funcionNombreAssembly.[clase]:funcion
CREATE FUNCTIONCREATE FUNCTION NombreFuncionNombreFuncion () RETURNS int() RETURNS int
AS EXTERNAL NAMEAS EXTERNAL NAME NombreAssembly.[clase]:funcionNombreAssembly.[clase]:funcion
Integración con .NETIntegración con .NET
SeguridadSeguridad
CAS deja de tener validezCAS deja de tener validez
Tres nuevos niveles gestionados por SQLTres nuevos niveles gestionados por SQL
SafeSafe
ExternalExternal
UnsafeUnsafe
Validados al dar de alta el assemblyValidados al dar de alta el assembly
Ej. Type safe, finalizers, mutable statics…Ej. Type safe, finalizers, mutable statics…
Llamadas al BCL restringidasLlamadas al BCL restringidas
Nuevo atributo HostProtectionAttributeNuevo atributo HostProtectionAttribute
Integración con .NETIntegración con .NET
Acceso a datosAcceso a datos
Comunicación mediante SqlAccess.dllComunicación mediante SqlAccess.dll
System.Data.SqlSystem.Data.Sql
Proveedor ADO.NETProveedor ADO.NET inprocessinprocess
Acceso al contexto de la conexiónAcceso al contexto de la conexión
PipePipe
Estado servidorEstado servidor
Tablas triggersTablas triggers
PeticiónPetición
Cursores de servidorCursores de servidor
Procedimiento almacenado enProcedimiento almacenado en
.NET.NET
Documentación disponibleDocumentación disponible
Using CLR Integration in SQL Server 2005Using CLR Integration in SQL Server 2005
Balaji RathakrishnanBalaji Rathakrishnan
Christian KleinermanChristian Kleinerman
Brad RichardsBrad Richards
Ramachandran VenkateshRamachandran Venkatesh
Vineet RaoVineet Rao
Microsoft – Noviembre 2004 – 41 páginasMicrosoft – Noviembre 2004 – 41 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/sqlclrguidance.asppull=/library/en-us/dnsql90/html/sqlclrguidance.asp
Managed Data Access Inside SQL Server withManaged Data Access Inside SQL Server with
ADO.NET and SQLCLRADO.NET and SQLCLR
Pablo CastroPablo Castro -- MicrosoftMicrosoft –– AbrilAbril 20020055 –– 2626 páginaspáginas
http://msdn.microsoft.com/library/default.asp?url=/library/en-http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dnsql90/html/mandataaccess.aspus/dnsql90/html/mandataaccess.asp
XML y SQL Server 2005XML y SQL Server 2005
XML y SQL Server 2005XML y SQL Server 2005
NovedadesNovedades
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
XML y SQL Server 2005XML y SQL Server 2005
Nuevo tipo XMLNuevo tipo XML
Almacena documentos XMLAlmacena documentos XML
Puede utilizarse como cualquier otro tipoPuede utilizarse como cualquier otro tipo
Columnas, parámetros, retorno de funciones …Columnas, parámetros, retorno de funciones …
Validación well-formed y XSDValidación well-formed y XSD
Se guarda como un BLOB (b1)Se guarda como un BLOB (b1)
EscenariosEscenarios
Información complejaInformación compleja
Datos semiestructuradosDatos semiestructurados
Gestión documental (ej. e-mail), mensajería (SOAP)Gestión documental (ej. e-mail), mensajería (SOAP)
Intercambio de documentos (B2B, B2C…)Intercambio de documentos (B2B, B2C…)
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>'
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
for $s in /doc[@id = 123]//sec[@num >= 3]for $s in /doc[@id = 123]//sec[@num >= 3]
return <topic>{data($s/heading)}</topic>return <topic>{data($s/heading)}</topic>
for $s in /doc[@id = 123]//sec[@num >= 3]for $s in /doc[@id = 123]//sec[@num >= 3]
return <topic>{data($s/heading)}</topic>return <topic>{data($s/heading)}</topic>
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(SELECT id, xDoc.query(
'for $s in /doc[@id = 123]//sec[@num >= 3]'for $s in /doc[@id = 123]//sec[@num >= 3]
return <topic>{data($s/heading)}</topic>')return <topic>{data($s/heading)}</topic>')
FROM docsFROM docs
SELECT id, xDoc.query(SELECT id, xDoc.query(
'for $s in /doc[@id = 123]//sec[@num >= 3]'for $s in /doc[@id = 123]//sec[@num >= 3]
return <topic>{data($s/heading)}</topic>')return <topic>{data($s/heading)}</topic>')
FROM docsFROM docs
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
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
Cuatro tiposCuatro tipos
PRIMARY: Indexa los nodosPRIMARY: Indexa los nodos
PATH: Indexa por path de nodoPATH: Indexa por path de nodo
VALUE: Indexa por contenido de nodosVALUE: Indexa por contenido de nodos
PROPERTY: Indexa por nodos comunesPROPERTY: Indexa por nodos comunes
XML y SQL Server 2005XML y SQL Server 2005
Documentación disponibleDocumentación disponible
XML Options in Microsoft SQL ServerXML Options in Microsoft SQL Server
20052005
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 ServerXML Support in Microsoft SQL Server
20052005
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
Service BrokerService Broker
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
Service BrokerService Broker
Y con éste ya van 4…Y con éste ya van 4…
MSMQMSMQ
Necesita usar DTC para transacciones con BDNecesita usar DTC para transacciones con BD
No garantiza ordenamiento de mensajesNo garantiza ordenamiento de mensajes
Biztalk messagingBiztalk messaging
Incorpora orquestaciónIncorpora orquestación
Automatiza procesoAutomatiza proceso
Indigo messagingIndigo messaging
Es interoperableEs interoperable
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.)
Mensajería asíncronaMensajería asíncrona
(¿Dónde está el truco?)(¿Dónde está el truco?)
Es necesario disponer del software cliente de laEs necesario disponer del software cliente de la
cola y de un servidorcola y de un servidor
Es necesario “diseñar/definir” una serie deEs necesario “diseñar/definir” una serie de
mensajes y de diálogos entre emisores ymensajes y de diálogos entre emisores y
receptoresreceptores
Si se utiliza en muchas aplicacionesSi se utiliza en muchas aplicaciones
Definimos un “canal” para cada cola (muchas)Definimos un “canal” para cada cola (muchas)
Mezclamos varias comunicaciones en una mismaMezclamos varias comunicaciones en una misma
cola (control)cola (control)
En algunos aspectos es similar a una conexiónEn algunos aspectos es similar a una conexión
a la BBDD (abrir/cerrar, coste, estado, …)a la BBDD (abrir/cerrar, coste, estado, …)
Service BrokerService Broker
MensajesMensajes
Unidad de comunicaciónUnidad de comunicación
Tres tiposTres tipos
BinariosBinarios
CabeceraCabecera
XML (tipados o sin tipar)XML (tipados o sin tipar)
CREATE MESSAGE TYPECREATE MESSAGE TYPE
[http://www.company.com/messages/Invoice][http://www.company.com/messages/Invoice]
VALIDATION = VALID_XMLVALIDATION = VALID_XML
WITH SCHEMA COLLECTION invoice_xsdWITH SCHEMA COLLECTION invoice_xsd
CREATE MESSAGE TYPECREATE MESSAGE TYPE
[http://www.company.com/messages/Invoice][http://www.company.com/messages/Invoice]
VALIDATION = VALID_XMLVALIDATION = VALID_XML
WITH SCHEMA COLLECTION invoice_xsdWITH SCHEMA COLLECTION invoice_xsd
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
))
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')
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])
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) ;
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
Colas simplesColas simples
Documentación disponibleDocumentación disponible
An Introduction to SQL Server ServiceAn Introduction to SQL Server Service
BrokerBroker
Roger Wolter – Julio 2004 –Roger Wolter – Julio 2004 – 110 páginas0 páginas
Kit de Recursos SQL Server 2005 Beta 2Kit de Recursos SQL Server 2005 Beta 2
Conceptos básicosConceptos básicos
A First Look at SQL Server 2005 ServiceA First Look at SQL Server 2005 Service
BrokerBroker
Roger Wolter – Julio 2004 – 20 páginasRoger Wolter – Julio 2004 – 20 páginas
http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/libhttp://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/lib
Conceptos y ejemplos de códigoConceptos y ejemplos de código
Mejoras en T-SQLMejoras en T-SQL
Mejoras en T-SQLMejoras en T-SQL
Control de excepcionesControl de excepciones
Se acabó el acceso a @@ERRORSe acabó el acceso a @@ERROR
Bloques TRY…CATCHBloques TRY…CATCH
AnidablesAnidables
Nuevas funciones disponibles en el CATCHNuevas funciones disponibles en el CATCH
ERROR_NUMBER, ERROR_MESSAGE…ERROR_NUMBER, ERROR_MESSAGE…
BEGIN TRYBEGIN TRY
SELECT * FROM authorsSELECT * FROM authors
END TRYEND TRY
BEGIN CATCHBEGIN CATCH
SELECT ERROR_NUMBER()SELECT ERROR_NUMBER()
END CATCHEND CATCH
BEGIN TRYBEGIN TRY
SELECT * FROM authorsSELECT * FROM authors
END TRYEND TRY
BEGIN CATCHBEGIN CATCH
SELECT ERROR_NUMBER()SELECT ERROR_NUMBER()
END CATCHEND CATCH
Mejoras en T-SQLMejoras en T-SQL
Common Table ExpressionsCommon Table Expressions
Resultset temporalResultset temporal
Sólo vive en la sentencia actualSólo vive en la sentencia actual
WITH mid ASWITH mid AS
((
SELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midvalSELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midval
from production.productfrom production.product
))
SELECT * FROM Production.Product, midSELECT * FROM Production.Product, mid
WHERE ListPrice > midvalWHERE ListPrice > midval
WITH mid ASWITH mid AS
((
SELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midvalSELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midval
from production.productfrom production.product
))
SELECT * FROM Production.Product, midSELECT * FROM Production.Product, mid
WHERE ListPrice > midvalWHERE ListPrice > midval
Mejor que las subqueries si hay varias igualesMejor que las subqueries si hay varias iguales
Admite recursividadAdmite recursividad
Mejoras en T-SQLMejoras en T-SQL
RankingRanking
Añade una columna basada en rankingsAñade una columna basada en rankings
ROW_NUMBERROW_NUMBER
RANKRANK
DENSE_RANKDENSE_RANK
NTILE (n)NTILE (n)
Pueden agruparse en particionesPueden agruparse en particiones
PARTITION BYPARTITION BY
Mejoras en T-SQLMejoras en T-SQL
Ranking (2)Ranking (2)
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
orderid customerid num rank denserank tile5orderid customerid num rank denserank tile5
----------- ---------- ------ ------ --------- ----------------- ---------- ------ ------ --------- ------
10308 ANATR 1 1 1 110308 ANATR 1 1 1 1
10365 ANTON 2 2 2 110365 ANTON 2 2 2 1
10355 AROUT 3 3 3 210355 AROUT 3 3 3 2
10383 AROUT 4 3 3 210383 AROUT 4 3 3 2
10278 BERGS 5 5 4 310278 BERGS 5 5 4 3
10280 BERGS 6 5 4 310280 BERGS 6 5 4 3
10384 BERGS 7 5 4 410384 BERGS 7 5 4 4
10265 BLONP 8 8 5 410265 BLONP 8 8 5 4
10297 BLONP 9 8 5 510297 BLONP 9 8 5 5
10360 BLONP 10 8 5 510360 BLONP 10 8 5 5
orderid customerid num rank denserank tile5orderid customerid num rank denserank tile5
----------- ---------- ------ ------ --------- ----------------- ---------- ------ ------ --------- ------
10308 ANATR 1 1 1 110308 ANATR 1 1 1 1
10365 ANTON 2 2 2 110365 ANTON 2 2 2 1
10355 AROUT 3 3 3 210355 AROUT 3 3 3 2
10383 AROUT 4 3 3 210383 AROUT 4 3 3 2
10278 BERGS 5 5 4 310278 BERGS 5 5 4 3
10280 BERGS 6 5 4 310280 BERGS 6 5 4 3
10384 BERGS 7 5 4 410384 BERGS 7 5 4 4
10265 BLONP 8 8 5 410265 BLONP 8 8 5 4
10297 BLONP 9 8 5 510297 BLONP 9 8 5 5
10360 BLONP 10 8 5 510360 BLONP 10 8 5 5
Mejoras en T-SQLMejoras en T-SQL
OtrasOtras
PivotPivot
Convierte filas a columnasConvierte filas a columnas
OUTPUTOUTPUT
Permite especificar una salida a sentencias dePermite especificar una salida a sentencias de
actualización distinta al número de filasactualización distinta al número de filas
Ej. Registros borrados, identities, etc.Ej. Registros borrados, identities, etc.
Aislamiento snapshotAislamiento snapshot
Escritores no bloquean a lectoresEscritores no bloquean a lectores
Mejoras en T-SQLMejoras en T-SQL
Ranking (2)Ranking (2)
DECLARE @DeletedOrders TABLEDECLARE @DeletedOrders TABLE
( orderid INT,( orderid INT,
orderdate DATETIME,orderdate DATETIME,
empid INT,empid INT,
custid VARCHAR(5),custid VARCHAR(5),
qty INT )qty INT )
WHILE 1=1WHILE 1=1
BEGINBEGIN
BEGIN TRANBEGIN TRAN
DELETE TOP(5000) FROM OrdersDELETE TOP(5000) FROM Orders
OUTPUT deleted.* INTO @DeletedOrdersOUTPUT deleted.* INTO @DeletedOrders
WHERE orderdate < '20030101'WHERE orderdate < '20030101'
INSERT INTO OrdersArchiveINSERT INTO OrdersArchive
SELECT * FROM @DeletedOrdersSELECT * FROM @DeletedOrders
COMMIT TRANCOMMIT TRAN
DELETE FROM @DeletedOrdersDELETE FROM @DeletedOrders
IF @@rowcount < 5000IF @@rowcount < 5000
BREAKBREAK
ENDEND
DECLARE @DeletedOrders TABLEDECLARE @DeletedOrders TABLE
( orderid INT,( orderid INT,
orderdate DATETIME,orderdate DATETIME,
empid INT,empid INT,
custid VARCHAR(5),custid VARCHAR(5),
qty INT )qty INT )
WHILE 1=1WHILE 1=1
BEGINBEGIN
BEGIN TRANBEGIN TRAN
DELETE TOP(5000) FROM OrdersDELETE TOP(5000) FROM Orders
OUTPUT deleted.* INTO @DeletedOrdersOUTPUT deleted.* INTO @DeletedOrders
WHERE orderdate < '20030101'WHERE orderdate < '20030101'
INSERT INTO OrdersArchiveINSERT INTO OrdersArchive
SELECT * FROM @DeletedOrdersSELECT * FROM @DeletedOrders
COMMIT TRANCOMMIT TRAN
DELETE FROM @DeletedOrdersDELETE FROM @DeletedOrders
IF @@rowcount < 5000IF @@rowcount < 5000
BREAKBREAK
ENDEND
Mejoras en T-SQLMejoras en T-SQL
Otras (2)Otras (2)
DRIDRI
SET NULL y SET DEFAULTSET NULL y SET DEFAULT
(…)(…)
CONSTRAINT FK_Orders_CustomersCONSTRAINT FK_Orders_Customers
FOREIGN KEY(customerid)FOREIGN KEY(customerid)
REFERENCES Customers(customerid)REFERENCES Customers(customerid)
ON DELETE SET NULLON DELETE SET NULL
ON UPDATE SET DEFAULTON UPDATE SET DEFAULT
(…)(…)
CONSTRAINT FK_Orders_CustomersCONSTRAINT FK_Orders_Customers
FOREIGN KEY(customerid)FOREIGN KEY(customerid)
REFERENCES Customers(customerid)REFERENCES Customers(customerid)
ON DELETE SET NULLON DELETE SET NULL
ON UPDATE SET DEFAULTON UPDATE SET DEFAULT
TOPTOP
Permite expresionesPermite expresiones
También para actualizacionesTambién para actualizaciones
T-SQLT-SQL
Documentación disponibleDocumentación disponible
SQL Server 2005 Beta 2 Transact-SQLSQL Server 2005 Beta 2 Transact-SQL
EnhancementsEnhancements
Itzik Ben-GanItzik Ben-Gan – S– Solid Quality Learningolid Quality Learning
DiciembreDiciembre 20020044 –– 4949 páginaspáginas
http://msdn.microsoft.com/library/en-http://msdn.microsoft.com/library/en-
us/dnsql90/html/sql_05TSQLEnhance.aspus/dnsql90/html/sql_05TSQLEnhance.asp
SQL Server 2005 Beta 2 SnapshotSQL Server 2005 Beta 2 Snapshot
IsolationIsolation
Kimberly L. Tripp - SQLSkills.com – Febrero 2005 – 59 páginasKimberly L. Tripp - SQLSkills.com – Febrero 2005 – 59 páginas
Hands On Lab 115Hands On Lab 115
MicrosoftMicrosoft -- 1818 páginaspáginas
Kit de recursos Beta 2Kit de recursos Beta 2
Mejoras en ADO.NETMejoras en ADO.NET
para SQL Server 2005para SQL Server 2005
Mejoras en ADO.NETMejoras en ADO.NET
MARSMARS
Múltiples resultsets y transacciones simultáneasMúltiples resultsets y transacciones simultáneas
por conexiónpor conexión
SqlCommand cmd = new SqlCommand("select * fromSqlCommand cmd = new SqlCommand("select * from
authors",conn);authors",conn);
SqlCommand cmd2 = new SqlCommand("select * fromSqlCommand cmd2 = new SqlCommand("select * from
jobs",conn);jobs",conn);
conn.Open();conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();SqlDataReader rdr = cmd.ExecuteReader();
SqlDataReader rdr2 = cmd2.ExecuteReader();SqlDataReader rdr2 = cmd2.ExecuteReader();
rdr2.Read();rdr2.Read();
rdr.Read();rdr.Read();
SqlCommand cmd = new SqlCommand("select * fromSqlCommand cmd = new SqlCommand("select * from
authors",conn);authors",conn);
SqlCommand cmd2 = new SqlCommand("select * fromSqlCommand cmd2 = new SqlCommand("select * from
jobs",conn);jobs",conn);
conn.Open();conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();SqlDataReader rdr = cmd.ExecuteReader();
SqlDataReader rdr2 = cmd2.ExecuteReader();SqlDataReader rdr2 = cmd2.ExecuteReader();
rdr2.Read();rdr2.Read();
rdr.Read();rdr.Read();
Mejoras en ADO.NETMejoras en ADO.NET
Dependencias SQLDependencias SQL
Notificación cuando cambia unNotificación cuando cambia un resultsetresultset
Útil para invalidar caché o vistasÚtil para invalidar caché o vistas
Basado en Service BrokerBasado en Service Broker
SqlNotificationRequestSqlNotificationRequest
Recibe un objeto comando y un servicioRecibe un objeto comando y un servicio
Envía un mensaje al servicio cuando cambia elEnvía un mensaje al servicio cuando cambia el resultsetresultset
SqlDependencySqlDependency
Abstrae el Service BrokerAbstrae el Service Broker
Evento OnChangedEvento OnChanged
NotificacionesNotificaciones
Documentación disponibleDocumentación disponible
Multiple Active Result Sets (MARS) in SQLMultiple Active Result Sets (MARS) in SQL
Server 2005Server 2005
Christian KleinermanChristian Kleinerman -- MicrosoftMicrosoft –– OctubreOctubre 20020044 –– 119 páginas9 páginas
http://msdn.microsoft.com/library/default.asp?url=/library/en-http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dnsql90/html/MARSinSQL05.aspus/dnsql90/html/MARSinSQL05.asp
ADO.NET and System.Xml v.2.0--The BetaADO.NET and System.Xml v.2.0--The Beta
Version 2ªedVersion 2ªed
Alex Homer, David Sussman, Mark FussellAlex Homer, David Sussman, Mark Fussell
Addison WesleyAddison Wesley –– MarzoMarzo 20020055 –– 560560 páginaspáginas (cap.muestra – 38 págs.)(cap.muestra – 38 págs.)
http://www.awprofessional.com/content/images/0321247124/samplechahttp://www.awprofessional.com/content/images/0321247124/samplecha
http://www.daveandal.net/books/7124/http://www.daveandal.net/books/7124/ (código)(código)
Mejoras en ADO.NETMejoras en ADO.NET
TransaccionesTransacciones
System.TransactionsSystem.Transactions
API manejada para definir transaccionesAPI manejada para definir transacciones
Sin EnterpriseServices (COM+)Sin EnterpriseServices (COM+)
PromotablePromotable
Comienza como local (10 ms)Comienza como local (10 ms)
Sigue local en accesos a SQL Server 2005Sigue local en accesos a SQL Server 2005
Sólo se promueve a DTC siSólo se promueve a DTC si
Se accede a SQL Server 2000, MSMQ, Oracle…Se accede a SQL Server 2000, MSMQ, Oracle…
Se acceden a dos SQL Server 2005Se acceden a dos SQL Server 2005
Mejoras en ADO.NETMejoras en ADO.NET
Transacciones (2)Transacciones (2)
using (TransactionScope ts = new TransactionScope())using (TransactionScope ts = new TransactionScope())
{{
SqlConnection conn1 = new SqlConnection(SqlConnection conn1 = new SqlConnection(
"server=.;integrated security=sspi;database=pubs"))"server=.;integrated security=sspi;database=pubs"))
// Local tx si SQL 2005, si no distribuida// Local tx si SQL 2005, si no distribuida
conn1.Open();conn1.Open();
SqlCommand cmd1 = new SqlCommand(SqlCommand cmd1 = new SqlCommand(
"INSERT jobs 'job1', 10, 10", conn1);"INSERT jobs 'job1', 10, 10", conn1);
cmd1.ExecuteNonQuery();cmd1.ExecuteNonQuery();
SqlConnection conn2 = new SqlConnection(SqlConnection conn2 = new SqlConnection(
"server=other;integrated security=sspi;database=pubs"))"server=other;integrated security=sspi;database=pubs"))
// promueve a distribuida// promueve a distribuida
conn2.Open();conn2.Open();
SqlCommand cmd2 = new SqlCommand(SqlCommand cmd2 = new SqlCommand(
"INSERT jobs 'job2', 10, 10", conn2);"INSERT jobs 'job2', 10, 10", conn2);
cmd2.ExecuteNonQuery();cmd2.ExecuteNonQuery();
ts.Complete(); // commit transactionts.Complete(); // commit transaction
}}
using (TransactionScope ts = new TransactionScope())using (TransactionScope ts = new TransactionScope())
{{
SqlConnection conn1 = new SqlConnection(SqlConnection conn1 = new SqlConnection(
"server=.;integrated security=sspi;database=pubs"))"server=.;integrated security=sspi;database=pubs"))
// Local tx si SQL 2005, si no distribuida// Local tx si SQL 2005, si no distribuida
conn1.Open();conn1.Open();
SqlCommand cmd1 = new SqlCommand(SqlCommand cmd1 = new SqlCommand(
"INSERT jobs 'job1', 10, 10", conn1);"INSERT jobs 'job1', 10, 10", conn1);
cmd1.ExecuteNonQuery();cmd1.ExecuteNonQuery();
SqlConnection conn2 = new SqlConnection(SqlConnection conn2 = new SqlConnection(
"server=other;integrated security=sspi;database=pubs"))"server=other;integrated security=sspi;database=pubs"))
// promueve a distribuida// promueve a distribuida
conn2.Open();conn2.Open();
SqlCommand cmd2 = new SqlCommand(SqlCommand cmd2 = new SqlCommand(
"INSERT jobs 'job2', 10, 10", conn2);"INSERT jobs 'job2', 10, 10", conn2);
cmd2.ExecuteNonQuery();cmd2.ExecuteNonQuery();
ts.Complete(); // commit transactionts.Complete(); // commit transaction
}}
TransaccionesTransacciones
Documentación disponibleDocumentación disponible
ADO.NET and System.TransactionsADO.NET and System.Transactions
John PapaJohn Papa -- MicrosoftMicrosoft –– MSDN Magazine FebreroMSDN Magazine Febrero 20020055 –– 55 páginaspáginas
http://msdn.microsoft.com/msdnmag/issues/05/02/DataPoints/defaulhttp://msdn.microsoft.com/msdnmag/issues/05/02/DataPoints/defaul
t.aspxt.aspx
BI Operaciones diversasBI Operaciones diversas
SSISSSIS
UDMUDM
SSAS (OLAP)SSAS (OLAP)
SSRSSSRS
jordi@ramblainf.comjordi@ramblainf.com

Más contenido relacionado

Destacado

03n 0312-ts00002-vol1-1
03n 0312-ts00002-vol1-103n 0312-ts00002-vol1-1
03n 0312-ts00002-vol1-1persolato
 
Resyconv sag salud_2010__1_
Resyconv sag salud_2010__1_Resyconv sag salud_2010__1_
Resyconv sag salud_2010__1_persolato
 
プログラムを書こうとして吐き気や頭痛がしなければ特に問題なし
プログラムを書こうとして吐き気や頭痛がしなければ特に問題なしプログラムを書こうとして吐き気や頭痛がしなければ特に問題なし
プログラムを書こうとして吐き気や頭痛がしなければ特に問題なしNaoki Hanakawa
 
create account book by c#
create account book by c#create account book by c#
create account book by c#Naoki Hanakawa
 

Destacado (10)

Memoiaing
MemoiaingMemoiaing
Memoiaing
 
Af corea
Af coreaAf corea
Af corea
 
M corea
M coreaM corea
M corea
 
Latino and solar/ Willie C. Velasquez Institute Res
Latino and solar/ Willie C. Velasquez Institute ResLatino and solar/ Willie C. Velasquez Institute Res
Latino and solar/ Willie C. Velasquez Institute Res
 
Sd corea
Sd coreaSd corea
Sd corea
 
03n 0312-ts00002-vol1-1
03n 0312-ts00002-vol1-103n 0312-ts00002-vol1-1
03n 0312-ts00002-vol1-1
 
BCCとGCCの比較
BCCとGCCの比較BCCとGCCの比較
BCCとGCCの比較
 
Resyconv sag salud_2010__1_
Resyconv sag salud_2010__1_Resyconv sag salud_2010__1_
Resyconv sag salud_2010__1_
 
プログラムを書こうとして吐き気や頭痛がしなければ特に問題なし
プログラムを書こうとして吐き気や頭痛がしなければ特に問題なしプログラムを書こうとして吐き気や頭痛がしなければ特に問題なし
プログラムを書こうとして吐き気や頭痛がしなければ特に問題なし
 
create account book by c#
create account book by c#create account book by c#
create account book by c#
 

Similar a Sql server 2005_envio

Sql server 2008
Sql server 2008Sql server 2008
Sql server 2008brobelo
 
Automatizando la limpieza de datos con SSIS
Automatizando la limpieza de datos con SSISAutomatizando la limpieza de datos con SSIS
Automatizando la limpieza de datos con SSISSpanishPASSVC
 
Byte Tech Enterprise Presentation
Byte Tech Enterprise PresentationByte Tech Enterprise Presentation
Byte Tech Enterprise Presentationfpetiti
 
Contrastación Sql 2005 y 2008
Contrastación Sql 2005 y 2008Contrastación Sql 2005 y 2008
Contrastación Sql 2005 y 2008Luis Vázquez
 
Planes De Entrenamiento En TecnologíA
Planes De Entrenamiento En TecnologíAPlanes De Entrenamiento En TecnologíA
Planes De Entrenamiento En TecnologíALUISVALENZUELA
 
Catalogo formación MCT - MVP
Catalogo formación MCT - MVPCatalogo formación MCT - MVP
Catalogo formación MCT - MVPMVP CLUSTER
 
CV_Roger_Peralta 2017
CV_Roger_Peralta 2017CV_Roger_Peralta 2017
CV_Roger_Peralta 2017Roger Peralta
 
Arquitectura evolutiva
Arquitectura evolutivaArquitectura evolutiva
Arquitectura evolutivaLuisa Emme
 
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL ServerJohn Bulla
 
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...SpanishPASSVC
 
Contrastación SQL 2005 y SQL 2008
Contrastación SQL 2005 y SQL 2008Contrastación SQL 2005 y SQL 2008
Contrastación SQL 2005 y SQL 2008Luis Vázquez
 
Rosario evento a clientes de RMDM Octubre 2009 - RM
Rosario evento a clientes de RMDM Octubre 2009 - RMRosario evento a clientes de RMDM Octubre 2009 - RM
Rosario evento a clientes de RMDM Octubre 2009 - RMCA RMDM Latam
 
Structuredintelligence
StructuredintelligenceStructuredintelligence
StructuredintelligenceJose Martinez
 
074 bi agil + saa s + cloud = tda
074 bi agil + saa s + cloud = tda074 bi agil + saa s + cloud = tda
074 bi agil + saa s + cloud = tdaGeneXus
 
Sql server 2008 novedades en BI - es - tech net
Sql server 2008 novedades en BI - es - tech netSql server 2008 novedades en BI - es - tech net
Sql server 2008 novedades en BI - es - tech netSalvador Ramos
 

Similar a Sql server 2005_envio (20)

Sqlserver
SqlserverSqlserver
Sqlserver
 
Sql
SqlSql
Sql
 
Sql server 2008
Sql server 2008Sql server 2008
Sql server 2008
 
Automatizando la limpieza de datos con SSIS
Automatizando la limpieza de datos con SSISAutomatizando la limpieza de datos con SSIS
Automatizando la limpieza de datos con SSIS
 
Byte Tech Enterprise Presentation
Byte Tech Enterprise PresentationByte Tech Enterprise Presentation
Byte Tech Enterprise Presentation
 
Contrastación Sql 2005 y 2008
Contrastación Sql 2005 y 2008Contrastación Sql 2005 y 2008
Contrastación Sql 2005 y 2008
 
Separata uni sql2008 administracion
Separata uni sql2008 administracionSeparata uni sql2008 administracion
Separata uni sql2008 administracion
 
Planes De Entrenamiento En TecnologíA
Planes De Entrenamiento En TecnologíAPlanes De Entrenamiento En TecnologíA
Planes De Entrenamiento En TecnologíA
 
Catalogo formación MCT - MVP
Catalogo formación MCT - MVPCatalogo formación MCT - MVP
Catalogo formación MCT - MVP
 
CV_Roger_Peralta 2017
CV_Roger_Peralta 2017CV_Roger_Peralta 2017
CV_Roger_Peralta 2017
 
Arquitectura evolutiva
Arquitectura evolutivaArquitectura evolutiva
Arquitectura evolutiva
 
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server
24 Horas Español 2014 - ALM para el desarrollo de base de datos SQL Server
 
SEMANA 1 Introduccion.pptx
SEMANA 1 Introduccion.pptxSEMANA 1 Introduccion.pptx
SEMANA 1 Introduccion.pptx
 
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...
24 HOP edición Español - Alm para el desarrollo de base de datos sql server -...
 
Contrastación SQL 2005 y SQL 2008
Contrastación SQL 2005 y SQL 2008Contrastación SQL 2005 y SQL 2008
Contrastación SQL 2005 y SQL 2008
 
TriggerDB Brochure
TriggerDB BrochureTriggerDB Brochure
TriggerDB Brochure
 
Rosario evento a clientes de RMDM Octubre 2009 - RM
Rosario evento a clientes de RMDM Octubre 2009 - RMRosario evento a clientes de RMDM Octubre 2009 - RM
Rosario evento a clientes de RMDM Octubre 2009 - RM
 
Structuredintelligence
StructuredintelligenceStructuredintelligence
Structuredintelligence
 
074 bi agil + saa s + cloud = tda
074 bi agil + saa s + cloud = tda074 bi agil + saa s + cloud = tda
074 bi agil + saa s + cloud = tda
 
Sql server 2008 novedades en BI - es - tech net
Sql server 2008 novedades en BI - es - tech netSql server 2008 novedades en BI - es - tech net
Sql server 2008 novedades en BI - es - tech net
 

Más de persolato

File entidades55433
File entidades55433File entidades55433
File entidades55433persolato
 
Manual practico (2)
Manual practico (2)Manual practico (2)
Manual practico (2)persolato
 
Document1023
Document1023Document1023
Document1023persolato
 
File entidades55433
File entidades55433File entidades55433
File entidades55433persolato
 
F pp-it-007 v02
F pp-it-007 v02F pp-it-007 v02
F pp-it-007 v02persolato
 
03n 0312-ts00002-vol1-1
03n 0312-ts00002-vol1-103n 0312-ts00002-vol1-1
03n 0312-ts00002-vol1-1persolato
 
1 documento1456
1 documento14561 documento1456
1 documento1456persolato
 
02 17 30_3c._carne_3c
02 17 30_3c._carne_3c02 17 30_3c._carne_3c
02 17 30_3c._carne_3cpersolato
 
231211025445
231211025445231211025445
231211025445persolato
 
7 suberbie germ%e1n
7 suberbie germ%e1n7 suberbie germ%e1n
7 suberbie germ%e1npersolato
 
293 427 vinculación
293 427 vinculación293 427 vinculación
293 427 vinculaciónpersolato
 
Guiadeinspeccion
GuiadeinspeccionGuiadeinspeccion
Guiadeinspeccionpersolato
 
6e97e38fc6718827e04001011f014080
6e97e38fc6718827e04001011f0140806e97e38fc6718827e04001011f014080
6e97e38fc6718827e04001011f014080persolato
 
Calculos ufc
Calculos ufcCalculos ufc
Calculos ufcpersolato
 
55 exodoncia
55 exodoncia55 exodoncia
55 exodonciapersolato
 
F cer-aee-pp-037 v02-1
F cer-aee-pp-037 v02-1F cer-aee-pp-037 v02-1
F cer-aee-pp-037 v02-1persolato
 
Reglamento 2073-2005
Reglamento 2073-2005Reglamento 2073-2005
Reglamento 2073-2005persolato
 
1 reglamento inspeccion_veterinaria_369-1983
1 reglamento inspeccion_veterinaria_369-19831 reglamento inspeccion_veterinaria_369-1983
1 reglamento inspeccion_veterinaria_369-1983persolato
 

Más de persolato (20)

File entidades55433
File entidades55433File entidades55433
File entidades55433
 
Manual practico (2)
Manual practico (2)Manual practico (2)
Manual practico (2)
 
Document1023
Document1023Document1023
Document1023
 
File entidades55433
File entidades55433File entidades55433
File entidades55433
 
F pp-it-007 v02
F pp-it-007 v02F pp-it-007 v02
F pp-it-007 v02
 
03n 0312-ts00002-vol1-1
03n 0312-ts00002-vol1-103n 0312-ts00002-vol1-1
03n 0312-ts00002-vol1-1
 
1 documento1456
1 documento14561 documento1456
1 documento1456
 
02 17 30_3c._carne_3c
02 17 30_3c._carne_3c02 17 30_3c._carne_3c
02 17 30_3c._carne_3c
 
76 9751 1
76 9751 176 9751 1
76 9751 1
 
231211025445
231211025445231211025445
231211025445
 
76 9751 1
76 9751 176 9751 1
76 9751 1
 
7 suberbie germ%e1n
7 suberbie germ%e1n7 suberbie germ%e1n
7 suberbie germ%e1n
 
293 427 vinculación
293 427 vinculación293 427 vinculación
293 427 vinculación
 
Guiadeinspeccion
GuiadeinspeccionGuiadeinspeccion
Guiadeinspeccion
 
6e97e38fc6718827e04001011f014080
6e97e38fc6718827e04001011f0140806e97e38fc6718827e04001011f014080
6e97e38fc6718827e04001011f014080
 
Calculos ufc
Calculos ufcCalculos ufc
Calculos ufc
 
55 exodoncia
55 exodoncia55 exodoncia
55 exodoncia
 
F cer-aee-pp-037 v02-1
F cer-aee-pp-037 v02-1F cer-aee-pp-037 v02-1
F cer-aee-pp-037 v02-1
 
Reglamento 2073-2005
Reglamento 2073-2005Reglamento 2073-2005
Reglamento 2073-2005
 
1 reglamento inspeccion_veterinaria_369-1983
1 reglamento inspeccion_veterinaria_369-19831 reglamento inspeccion_veterinaria_369-1983
1 reglamento inspeccion_veterinaria_369-1983
 

Sql server 2005_envio

  • 1. SQL Server 2005SQL Server 2005 Jordi RamblaJordi Rambla CertiaCertia Microsoft MVPMicrosoft MVP jordi@ramblainf.comjordi@ramblainf.com
  • 2. Yo (Jordi Rambla – jordi@ramblainf.com)Yo (Jordi Rambla – jordi@ramblainf.com) Director técnico de CertiaDirector técnico de Certia Consultor y profesor de Reporting y BIConsultor y profesor de Reporting y BI Mentor Asociado de Solid Quality LearningMentor Asociado de Solid Quality Learning IberoamericanaIberoamericana MVP SQL ServerMVP SQL Server Regional Director de MicrosoftRegional Director de Microsoft circacirca1997-20041997-2004 Consultor de P&P,XML, ES y WS en Ciclo .NET UOCConsultor de P&P,XML, ES y WS en Ciclo .NET UOC Certia (http://certia.ramblainf.com)Certia (http://certia.ramblainf.com) Es la marca de servicios de rambla informàticaEs la marca de servicios de rambla informàtica Consultoría, formación y aplicaciones en BI y .NETConsultoría, formación y aplicaciones en BI y .NET Trabajando en informática empresarial desde 1985Trabajando en informática empresarial desde 1985
  • 3. 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 .Net conAyudando a obtener lo mejor de SQLServer y .Net con FormaciónFormación ConsultoríaConsultoría MentoringMentoring
  • 4. Solid Quality Learning University SummitsSolid Quality Learning University Summits ¿Qué son los SQL University Summits?¿Qué son los SQL University Summits? Intensos, avanzados, esencialmente útilesIntensos, avanzados, esencialmente útiles Temarios aplicados a sistemas empresarialesTemarios aplicados a sistemas empresariales Eventos formativos, no de marketingEventos formativos, no de marketing 2 grupos de sesiones simultáneas2 grupos de sesiones simultáneas 4 seminarios de día completo4 seminarios de día completo 9 mentores presentando 28 sesiones9 mentores presentando 28 sesiones En castellanoEn castellano ¿Dónde?¿Dónde? Madrid (del 25 al 29 de Abril del 2005)Madrid (del 25 al 29 de Abril del 2005) Barcelona (¿2005?); tBarcelona (¿2005?); también en:ambién en: Milán, Washington DC, Los Angeles, Chicago, Dallas, Monterrey, San Salvador,Milán, Washington DC, Los Angeles, Chicago, Dallas, Monterrey, San Salvador, Singapore, Hong KongSingapore, Hong Kong
  • 5. AgendaAgenda ¿Qué hay de nuevo?¿Qué hay de nuevo? Integración con .NETIntegración con .NET XML y SQL Server 2005XML y SQL Server 2005 Service BrokerService Broker Mejoras en T-SQLMejoras en T-SQL Mejoras en ADO.NETMejoras en ADO.NET
  • 6. ¿Qué hay de nuevo?¿Qué hay de nuevo?
  • 7. ¿Qué hay de nuevo?¿Qué hay de nuevo? .NET Framework.NET Framework Common Language Runtime IntegrationCommon Language Runtime Integration User-defined AggregatesUser-defined Aggregates User-defined Data TypesUser-defined Data Types User-defined FunctionsUser-defined Functions SQL Server .NET Data ProviderSQL Server .NET Data Provider Extended TriggersExtended Triggers Data TypesData Types FileStream Storage AttributeFileStream Storage Attribute Managed SQL TypesManaged SQL Types New XML DatatypeNew XML Datatype SQL Server EngineSQL Server Engine New Message Service BrokerNew Message Service Broker HTTP Support (Native HTTP)HTTP Support (Native HTTP) Database Tuning AdvisorDatabase Tuning Advisor Enhanced Read ahead & scanEnhanced Read ahead & scan Extended IndexesExtended Indexes Multiple Active Result SetsMultiple Active Result Sets Persisted Computed ColumnsPersisted Computed Columns Queuing SupportQueuing Support Snapshot Isolation LevelSnapshot Isolation Level Scale Up PartitioningScale Up Partitioning VIA supportVIA support NUMA supportNUMA support Database Failure and RedundancyDatabase Failure and Redundancy Fail-over Clustering (up to 8 node)Fail-over Clustering (up to 8 node) Enhanced Multi-instance SupportEnhanced Multi-instance Support Database MirroringDatabase Mirroring Database ViewpointsDatabase Viewpoints XMLXML XQUERY Support (Server & Mid Tier)XQUERY Support (Server & Mid Tier) XML Data Manipulation LanguageXML Data Manipulation Language FOR XML EnhancementsFOR XML Enhancements XML Schema (XSD) SupportXML Schema (XSD) Support MSXML 6.0 (Native)MSXML 6.0 (Native) .Net XML Framework.Net XML Framework Database MaintenanceDatabase Maintenance Backup and Restore EnhancementsBackup and Restore Enhancements Checksum Integrity ChecksChecksum Integrity Checks Dedicated Administrator ConnectionDedicated Administrator Connection Dynamic AWEDynamic AWE Fast RecoveryFast Recovery Highly-available UpgradeHighly-available Upgrade Online Index OperationsOnline Index Operations Online RestoreOnline Restore Parallel DBCCParallel DBCC Parallel Index OperationsParallel Index Operations Management ToolsManagement Tools MDX Query EditorMDX Query Editor MDX IntellisenseMDX Intellisense T-SQL IntellisenseT-SQL Intellisense Version Control SupportVersion Control Support XML/AXML/A SQLCMD Command Line ToolSQLCMD Command Line Tool Performance TuningPerformance Tuning Profiler EnhancementsProfiler Enhancements Profiling Analysis ServicesProfiling Analysis Services Exportable ShowplanExportable Showplan Exportable Deadlock TracesExportable Deadlock Traces Full-text SearchFull-text Search Indexing of XML DatatypeIndexing of XML Datatype MDACMDAC Side by Side installationSide by Side installation Microsoft Installer base setupMicrosoft Installer base setup Support for Active Directory DeploymentSupport for Active Directory Deployment SQL Client .NET Data ProviderSQL Client .NET Data Provider Server Cursor SupportServer Cursor Support AsynchAsynch SecuritySecurity All Permissions GrantableAll Permissions Grantable Fine Grain Administration RightsFine Grain Administration Rights Separation of Users and SchemaSeparation of Users and Schema ReplicationReplication Auto-tuning Replication AgentsAuto-tuning Replication Agents Oracle PublicationOracle Publication Improved Blob Change TrackingImproved Blob Change Tracking OLAP and Data MiningOLAP and Data Mining Analysis Management ObjectsAnalysis Management Objects Windows Integrated Backup and RestoreWindows Integrated Backup and Restore Web Service/XML for AnalysisWeb Service/XML for Analysis DTS and DM IntegrationDTS and DM Integration Eight new DM algorithmsEight new DM algorithms Auto Packaging and DeploymentAuto Packaging and Deployment Data Transformation ServicesData Transformation Services New Architecture (DTR + DTP)New Architecture (DTR + DTP) Complex Control FlowsComplex Control Flows Control Flow DebuggingControl Flow Debugging For Each EnumerationsFor Each Enumerations Property MappingsProperty Mappings Full Data Flow DesignerFull Data Flow Designer Full DTS Control Flow DesignerFull DTS Control Flow Designer Graphical Presentation of Pkg ExecutionGraphical Presentation of Pkg Execution Immediate Mode and Project ModeImmediate Mode and Project Mode Package (Advanced) Deployment ToolsPackage (Advanced) Deployment Tools Custom Tasks and TransformationsCustom Tasks and Transformations Reporting ServicesReporting Services Multiple Output FormatsMultiple Output Formats Parameters (Static, Dynamic, Hierarchical)Parameters (Static, Dynamic, Hierarchical) Bulk Delivery of Personalized ContentBulk Delivery of Personalized Content Support Multiple Data SourcesSupport Multiple Data Sources STS (Web Parts, Doc Libraries)STS (Web Parts, Doc Libraries) Visual Design ToolVisual Design Tool Charting, Sorting, Filtering, Drill-ThroughCharting, Sorting, Filtering, Drill-Through Scheduling, CachingScheduling, Caching Complete Scripting EngineComplete Scripting Engine Scale Out architectureScale Out architecture Open XML Report DefinitionOpen XML Report Definition Notification ServicesNotification Services
  • 8. OtrosOtros serviciosservicios OtrosOtros serviciosservicios ¿Qué hay de nuevo?¿Qué hay de nuevo? ContextoContexto OSOS ServicesServices BizBiz Tier LogicTier Logic BizBiz Tier LogicTier Logic Servicios SOServicios SOServicios SOServicios SO XMLXML XMLXML XML XML HTMLHTML XMLXML XMLXML BrowsersBrowsers estándarestándar BrowsersBrowsers estándarestándar DispositivosDispositivos móvilesmóviles DispositivosDispositivos móvilesmóviles ClientesClientes inteligentesinteligentes ClientesClientes inteligentesinteligentes Lógica aplicaciónLógica aplicaciónLógica aplicaciónLógica aplicación ServiciosServicios WebWeb ServiciosServicios WebWeb OtrosOtros serviciosservicios OtrosOtros serviciosservicios ServiciosServicios building blocksbuilding blocks ServiciosServicios building blocksbuilding blocks FormulariosFormularios WebWeb FormulariosFormularios WebWeb
  • 9. ServiciosServicios building blocksbuilding blocks ServiciosServicios building blocksbuilding blocks OtrosOtros serviciosservicios OtrosOtros serviciosservicios OtrosOtros serviciosservicios OtrosOtros serviciosservicios ¿Qué hay de nuevo?¿Qué hay de nuevo? ContextoContexto OSOS ServicesServices BizBiz Tier LogicTier Logic BizBiz Tier LogicTier Logic Servicios SOServicios SOServicios SOServicios SO XMLXML XMLXML XML XML HTMLHTML XMLXML XMLXML BrowsersBrowsers estándarestándar BrowsersBrowsers estándarestándar DispositivosDispositivos móvilesmóviles DispositivosDispositivos móvilesmóviles ClientesClientes inteligentesinteligentes ClientesClientes inteligentesinteligentes Lógica aplicaciónLógica aplicaciónLógica aplicaciónLógica aplicación ServiciosServicios WebWeb ServiciosServicios WebWeb FormulariosFormularios WebWeb FormulariosFormularios WebWeb
  • 11. Integración con .NETIntegración con .NET Alternativa a T-SQLAlternativa a T-SQL FuncionesFunciones definidas por eldefinidas por el usuariousuario ProcedimientosProcedimientos almacenadosalmacenados TriggersTriggers Tipos definidosTipos definidos por el usuariopor el usuario AggregatesAggregates T-SQLT-SQL LenguajesLenguajes .NET.NET
  • 12. Integración con .NETIntegración con .NET CreaciónCreación Registro de assembliesRegistro de assemblies Almacenados en la base de datosAlmacenados en la base de datos CREATE ASSEMBLYCREATE ASSEMBLY NombreAssemblyNombreAssembly FROMFROM c:assembly.dllc:assembly.dllCREATE ASSEMBLYCREATE ASSEMBLY NombreAssemblyNombreAssembly FROMFROM c:assembly.dllc:assembly.dll ReferenciasReferencias Se almacenan automáticamenteSe almacenan automáticamente Sólo dependencias que no estén en la GACSólo dependencias que no estén en la GAC
  • 13. Integración con .NETIntegración con .NET Creación (II)Creación (II) Definición de:Definición de: UDFs, procedimientos almacenados, triggersUDFs, procedimientos almacenados, triggers Enlazando a función estática y públicaEnlazando a función estática y pública UDTs, aggregatesUDTs, aggregates Enlazando a claseEnlazando a clase CREATE FUNCTIONCREATE FUNCTION NombreFuncionNombreFuncion () RETURNS int() RETURNS int AS EXTERNAL NAMEAS EXTERNAL NAME NombreAssembly.[clase]:funcionNombreAssembly.[clase]:funcion CREATE FUNCTIONCREATE FUNCTION NombreFuncionNombreFuncion () RETURNS int() RETURNS int AS EXTERNAL NAMEAS EXTERNAL NAME NombreAssembly.[clase]:funcionNombreAssembly.[clase]:funcion
  • 14. Integración con .NETIntegración con .NET SeguridadSeguridad CAS deja de tener validezCAS deja de tener validez Tres nuevos niveles gestionados por SQLTres nuevos niveles gestionados por SQL SafeSafe ExternalExternal UnsafeUnsafe Validados al dar de alta el assemblyValidados al dar de alta el assembly Ej. Type safe, finalizers, mutable statics…Ej. Type safe, finalizers, mutable statics… Llamadas al BCL restringidasLlamadas al BCL restringidas Nuevo atributo HostProtectionAttributeNuevo atributo HostProtectionAttribute
  • 15. Integración con .NETIntegración con .NET Acceso a datosAcceso a datos Comunicación mediante SqlAccess.dllComunicación mediante SqlAccess.dll System.Data.SqlSystem.Data.Sql Proveedor ADO.NETProveedor ADO.NET inprocessinprocess Acceso al contexto de la conexiónAcceso al contexto de la conexión PipePipe Estado servidorEstado servidor Tablas triggersTablas triggers PeticiónPetición Cursores de servidorCursores de servidor
  • 17. Documentación disponibleDocumentación disponible Using CLR Integration in SQL Server 2005Using CLR Integration in SQL Server 2005 Balaji RathakrishnanBalaji Rathakrishnan Christian KleinermanChristian Kleinerman Brad RichardsBrad Richards Ramachandran VenkateshRamachandran Venkatesh Vineet RaoVineet Rao Microsoft – Noviembre 2004 – 41 páginasMicrosoft – Noviembre 2004 – 41 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/sqlclrguidance.asppull=/library/en-us/dnsql90/html/sqlclrguidance.asp Managed Data Access Inside SQL Server withManaged Data Access Inside SQL Server with ADO.NET and SQLCLRADO.NET and SQLCLR Pablo CastroPablo Castro -- MicrosoftMicrosoft –– AbrilAbril 20020055 –– 2626 páginaspáginas http://msdn.microsoft.com/library/default.asp?url=/library/en-http://msdn.microsoft.com/library/default.asp?url=/library/en- us/dnsql90/html/mandataaccess.aspus/dnsql90/html/mandataaccess.asp
  • 18. XML y SQL Server 2005XML y SQL Server 2005
  • 19. XML y SQL Server 2005XML y SQL Server 2005 NovedadesNovedades 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
  • 20. XML y SQL Server 2005XML y SQL Server 2005 Nuevo tipo XMLNuevo tipo XML Almacena documentos XMLAlmacena documentos XML Puede utilizarse como cualquier otro tipoPuede utilizarse como cualquier otro tipo Columnas, parámetros, retorno de funciones …Columnas, parámetros, retorno de funciones … Validación well-formed y XSDValidación well-formed y XSD Se guarda como un BLOB (b1)Se guarda como un BLOB (b1) EscenariosEscenarios Información complejaInformación compleja Datos semiestructuradosDatos semiestructurados Gestión documental (ej. e-mail), mensajería (SOAP)Gestión documental (ej. e-mail), mensajería (SOAP) Intercambio de documentos (B2B, B2C…)Intercambio de documentos (B2B, B2C…)
  • 21. 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>'
  • 22. 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 for $s in /doc[@id = 123]//sec[@num >= 3]for $s in /doc[@id = 123]//sec[@num >= 3] return <topic>{data($s/heading)}</topic>return <topic>{data($s/heading)}</topic> for $s in /doc[@id = 123]//sec[@num >= 3]for $s in /doc[@id = 123]//sec[@num >= 3] return <topic>{data($s/heading)}</topic>return <topic>{data($s/heading)}</topic>
  • 23. 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(SELECT id, xDoc.query( 'for $s in /doc[@id = 123]//sec[@num >= 3]'for $s in /doc[@id = 123]//sec[@num >= 3] return <topic>{data($s/heading)}</topic>')return <topic>{data($s/heading)}</topic>') FROM docsFROM docs SELECT id, xDoc.query(SELECT id, xDoc.query( 'for $s in /doc[@id = 123]//sec[@num >= 3]'for $s in /doc[@id = 123]//sec[@num >= 3] return <topic>{data($s/heading)}</topic>')return <topic>{data($s/heading)}</topic>') FROM docsFROM docs
  • 24. 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
  • 25. 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 Cuatro tiposCuatro tipos PRIMARY: Indexa los nodosPRIMARY: Indexa los nodos PATH: Indexa por path de nodoPATH: Indexa por path de nodo VALUE: Indexa por contenido de nodosVALUE: Indexa por contenido de nodos PROPERTY: Indexa por nodos comunesPROPERTY: Indexa por nodos comunes
  • 26. XML y SQL Server 2005XML y SQL Server 2005
  • 27. Documentación disponibleDocumentación disponible XML Options in Microsoft SQL ServerXML Options in Microsoft SQL Server 20052005 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 ServerXML Support in Microsoft SQL Server 20052005 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
  • 29. 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
  • 30. Service BrokerService Broker Y con éste ya van 4…Y con éste ya van 4… MSMQMSMQ Necesita usar DTC para transacciones con BDNecesita usar DTC para transacciones con BD No garantiza ordenamiento de mensajesNo garantiza ordenamiento de mensajes Biztalk messagingBiztalk messaging Incorpora orquestaciónIncorpora orquestación Automatiza procesoAutomatiza proceso Indigo messagingIndigo messaging Es interoperableEs interoperable
  • 31. 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.)
  • 32. Mensajería asíncronaMensajería asíncrona (¿Dónde está el truco?)(¿Dónde está el truco?) Es necesario disponer del software cliente de laEs necesario disponer del software cliente de la cola y de un servidorcola y de un servidor Es necesario “diseñar/definir” una serie deEs necesario “diseñar/definir” una serie de mensajes y de diálogos entre emisores ymensajes y de diálogos entre emisores y receptoresreceptores Si se utiliza en muchas aplicacionesSi se utiliza en muchas aplicaciones Definimos un “canal” para cada cola (muchas)Definimos un “canal” para cada cola (muchas) Mezclamos varias comunicaciones en una mismaMezclamos varias comunicaciones en una misma cola (control)cola (control) En algunos aspectos es similar a una conexiónEn algunos aspectos es similar a una conexión a la BBDD (abrir/cerrar, coste, estado, …)a la BBDD (abrir/cerrar, coste, estado, …)
  • 33. Service BrokerService Broker MensajesMensajes Unidad de comunicaciónUnidad de comunicación Tres tiposTres tipos BinariosBinarios CabeceraCabecera XML (tipados o sin tipar)XML (tipados o sin tipar) CREATE MESSAGE TYPECREATE MESSAGE TYPE [http://www.company.com/messages/Invoice][http://www.company.com/messages/Invoice] VALIDATION = VALID_XMLVALIDATION = VALID_XML WITH SCHEMA COLLECTION invoice_xsdWITH SCHEMA COLLECTION invoice_xsd CREATE MESSAGE TYPECREATE MESSAGE TYPE [http://www.company.com/messages/Invoice][http://www.company.com/messages/Invoice] VALIDATION = VALID_XMLVALIDATION = VALID_XML WITH SCHEMA COLLECTION invoice_xsdWITH SCHEMA COLLECTION invoice_xsd
  • 34. 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 ))
  • 35. 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')
  • 36. 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])
  • 37. 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) ;
  • 38. 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
  • 40. Documentación disponibleDocumentación disponible An Introduction to SQL Server ServiceAn Introduction to SQL Server Service BrokerBroker Roger Wolter – Julio 2004 –Roger Wolter – Julio 2004 – 110 páginas0 páginas Kit de Recursos SQL Server 2005 Beta 2Kit de Recursos SQL Server 2005 Beta 2 Conceptos básicosConceptos básicos A First Look at SQL Server 2005 ServiceA First Look at SQL Server 2005 Service BrokerBroker Roger Wolter – Julio 2004 – 20 páginasRoger Wolter – Julio 2004 – 20 páginas http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/libhttp://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/lib Conceptos y ejemplos de códigoConceptos y ejemplos de código
  • 42. Mejoras en T-SQLMejoras en T-SQL Control de excepcionesControl de excepciones Se acabó el acceso a @@ERRORSe acabó el acceso a @@ERROR Bloques TRY…CATCHBloques TRY…CATCH AnidablesAnidables Nuevas funciones disponibles en el CATCHNuevas funciones disponibles en el CATCH ERROR_NUMBER, ERROR_MESSAGE…ERROR_NUMBER, ERROR_MESSAGE… BEGIN TRYBEGIN TRY SELECT * FROM authorsSELECT * FROM authors END TRYEND TRY BEGIN CATCHBEGIN CATCH SELECT ERROR_NUMBER()SELECT ERROR_NUMBER() END CATCHEND CATCH BEGIN TRYBEGIN TRY SELECT * FROM authorsSELECT * FROM authors END TRYEND TRY BEGIN CATCHBEGIN CATCH SELECT ERROR_NUMBER()SELECT ERROR_NUMBER() END CATCHEND CATCH
  • 43. Mejoras en T-SQLMejoras en T-SQL Common Table ExpressionsCommon Table Expressions Resultset temporalResultset temporal Sólo vive en la sentencia actualSólo vive en la sentencia actual WITH mid ASWITH mid AS (( SELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midvalSELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midval from production.productfrom production.product )) SELECT * FROM Production.Product, midSELECT * FROM Production.Product, mid WHERE ListPrice > midvalWHERE ListPrice > midval WITH mid ASWITH mid AS (( SELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midvalSELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midval from production.productfrom production.product )) SELECT * FROM Production.Product, midSELECT * FROM Production.Product, mid WHERE ListPrice > midvalWHERE ListPrice > midval Mejor que las subqueries si hay varias igualesMejor que las subqueries si hay varias iguales Admite recursividadAdmite recursividad
  • 44. Mejoras en T-SQLMejoras en T-SQL RankingRanking Añade una columna basada en rankingsAñade una columna basada en rankings ROW_NUMBERROW_NUMBER RANKRANK DENSE_RANKDENSE_RANK NTILE (n)NTILE (n) Pueden agruparse en particionesPueden agruparse en particiones PARTITION BYPARTITION BY
  • 45. Mejoras en T-SQLMejoras en T-SQL Ranking (2)Ranking (2) 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 orderid customerid num rank denserank tile5orderid customerid num rank denserank tile5 ----------- ---------- ------ ------ --------- ----------------- ---------- ------ ------ --------- ------ 10308 ANATR 1 1 1 110308 ANATR 1 1 1 1 10365 ANTON 2 2 2 110365 ANTON 2 2 2 1 10355 AROUT 3 3 3 210355 AROUT 3 3 3 2 10383 AROUT 4 3 3 210383 AROUT 4 3 3 2 10278 BERGS 5 5 4 310278 BERGS 5 5 4 3 10280 BERGS 6 5 4 310280 BERGS 6 5 4 3 10384 BERGS 7 5 4 410384 BERGS 7 5 4 4 10265 BLONP 8 8 5 410265 BLONP 8 8 5 4 10297 BLONP 9 8 5 510297 BLONP 9 8 5 5 10360 BLONP 10 8 5 510360 BLONP 10 8 5 5 orderid customerid num rank denserank tile5orderid customerid num rank denserank tile5 ----------- ---------- ------ ------ --------- ----------------- ---------- ------ ------ --------- ------ 10308 ANATR 1 1 1 110308 ANATR 1 1 1 1 10365 ANTON 2 2 2 110365 ANTON 2 2 2 1 10355 AROUT 3 3 3 210355 AROUT 3 3 3 2 10383 AROUT 4 3 3 210383 AROUT 4 3 3 2 10278 BERGS 5 5 4 310278 BERGS 5 5 4 3 10280 BERGS 6 5 4 310280 BERGS 6 5 4 3 10384 BERGS 7 5 4 410384 BERGS 7 5 4 4 10265 BLONP 8 8 5 410265 BLONP 8 8 5 4 10297 BLONP 9 8 5 510297 BLONP 9 8 5 5 10360 BLONP 10 8 5 510360 BLONP 10 8 5 5
  • 46. Mejoras en T-SQLMejoras en T-SQL OtrasOtras PivotPivot Convierte filas a columnasConvierte filas a columnas OUTPUTOUTPUT Permite especificar una salida a sentencias dePermite especificar una salida a sentencias de actualización distinta al número de filasactualización distinta al número de filas Ej. Registros borrados, identities, etc.Ej. Registros borrados, identities, etc. Aislamiento snapshotAislamiento snapshot Escritores no bloquean a lectoresEscritores no bloquean a lectores
  • 47. Mejoras en T-SQLMejoras en T-SQL Ranking (2)Ranking (2) DECLARE @DeletedOrders TABLEDECLARE @DeletedOrders TABLE ( orderid INT,( orderid INT, orderdate DATETIME,orderdate DATETIME, empid INT,empid INT, custid VARCHAR(5),custid VARCHAR(5), qty INT )qty INT ) WHILE 1=1WHILE 1=1 BEGINBEGIN BEGIN TRANBEGIN TRAN DELETE TOP(5000) FROM OrdersDELETE TOP(5000) FROM Orders OUTPUT deleted.* INTO @DeletedOrdersOUTPUT deleted.* INTO @DeletedOrders WHERE orderdate < '20030101'WHERE orderdate < '20030101' INSERT INTO OrdersArchiveINSERT INTO OrdersArchive SELECT * FROM @DeletedOrdersSELECT * FROM @DeletedOrders COMMIT TRANCOMMIT TRAN DELETE FROM @DeletedOrdersDELETE FROM @DeletedOrders IF @@rowcount < 5000IF @@rowcount < 5000 BREAKBREAK ENDEND DECLARE @DeletedOrders TABLEDECLARE @DeletedOrders TABLE ( orderid INT,( orderid INT, orderdate DATETIME,orderdate DATETIME, empid INT,empid INT, custid VARCHAR(5),custid VARCHAR(5), qty INT )qty INT ) WHILE 1=1WHILE 1=1 BEGINBEGIN BEGIN TRANBEGIN TRAN DELETE TOP(5000) FROM OrdersDELETE TOP(5000) FROM Orders OUTPUT deleted.* INTO @DeletedOrdersOUTPUT deleted.* INTO @DeletedOrders WHERE orderdate < '20030101'WHERE orderdate < '20030101' INSERT INTO OrdersArchiveINSERT INTO OrdersArchive SELECT * FROM @DeletedOrdersSELECT * FROM @DeletedOrders COMMIT TRANCOMMIT TRAN DELETE FROM @DeletedOrdersDELETE FROM @DeletedOrders IF @@rowcount < 5000IF @@rowcount < 5000 BREAKBREAK ENDEND
  • 48. Mejoras en T-SQLMejoras en T-SQL Otras (2)Otras (2) DRIDRI SET NULL y SET DEFAULTSET NULL y SET DEFAULT (…)(…) CONSTRAINT FK_Orders_CustomersCONSTRAINT FK_Orders_Customers FOREIGN KEY(customerid)FOREIGN KEY(customerid) REFERENCES Customers(customerid)REFERENCES Customers(customerid) ON DELETE SET NULLON DELETE SET NULL ON UPDATE SET DEFAULTON UPDATE SET DEFAULT (…)(…) CONSTRAINT FK_Orders_CustomersCONSTRAINT FK_Orders_Customers FOREIGN KEY(customerid)FOREIGN KEY(customerid) REFERENCES Customers(customerid)REFERENCES Customers(customerid) ON DELETE SET NULLON DELETE SET NULL ON UPDATE SET DEFAULTON UPDATE SET DEFAULT TOPTOP Permite expresionesPermite expresiones También para actualizacionesTambién para actualizaciones
  • 50. Documentación disponibleDocumentación disponible SQL Server 2005 Beta 2 Transact-SQLSQL Server 2005 Beta 2 Transact-SQL EnhancementsEnhancements Itzik Ben-GanItzik Ben-Gan – S– Solid Quality Learningolid Quality Learning DiciembreDiciembre 20020044 –– 4949 páginaspáginas http://msdn.microsoft.com/library/en-http://msdn.microsoft.com/library/en- us/dnsql90/html/sql_05TSQLEnhance.aspus/dnsql90/html/sql_05TSQLEnhance.asp SQL Server 2005 Beta 2 SnapshotSQL Server 2005 Beta 2 Snapshot IsolationIsolation Kimberly L. Tripp - SQLSkills.com – Febrero 2005 – 59 páginasKimberly L. Tripp - SQLSkills.com – Febrero 2005 – 59 páginas Hands On Lab 115Hands On Lab 115 MicrosoftMicrosoft -- 1818 páginaspáginas Kit de recursos Beta 2Kit de recursos Beta 2
  • 51. Mejoras en ADO.NETMejoras en ADO.NET para SQL Server 2005para SQL Server 2005
  • 52. Mejoras en ADO.NETMejoras en ADO.NET MARSMARS Múltiples resultsets y transacciones simultáneasMúltiples resultsets y transacciones simultáneas por conexiónpor conexión SqlCommand cmd = new SqlCommand("select * fromSqlCommand cmd = new SqlCommand("select * from authors",conn);authors",conn); SqlCommand cmd2 = new SqlCommand("select * fromSqlCommand cmd2 = new SqlCommand("select * from jobs",conn);jobs",conn); conn.Open();conn.Open(); SqlDataReader rdr = cmd.ExecuteReader();SqlDataReader rdr = cmd.ExecuteReader(); SqlDataReader rdr2 = cmd2.ExecuteReader();SqlDataReader rdr2 = cmd2.ExecuteReader(); rdr2.Read();rdr2.Read(); rdr.Read();rdr.Read(); SqlCommand cmd = new SqlCommand("select * fromSqlCommand cmd = new SqlCommand("select * from authors",conn);authors",conn); SqlCommand cmd2 = new SqlCommand("select * fromSqlCommand cmd2 = new SqlCommand("select * from jobs",conn);jobs",conn); conn.Open();conn.Open(); SqlDataReader rdr = cmd.ExecuteReader();SqlDataReader rdr = cmd.ExecuteReader(); SqlDataReader rdr2 = cmd2.ExecuteReader();SqlDataReader rdr2 = cmd2.ExecuteReader(); rdr2.Read();rdr2.Read(); rdr.Read();rdr.Read();
  • 53. Mejoras en ADO.NETMejoras en ADO.NET Dependencias SQLDependencias SQL Notificación cuando cambia unNotificación cuando cambia un resultsetresultset Útil para invalidar caché o vistasÚtil para invalidar caché o vistas Basado en Service BrokerBasado en Service Broker SqlNotificationRequestSqlNotificationRequest Recibe un objeto comando y un servicioRecibe un objeto comando y un servicio Envía un mensaje al servicio cuando cambia elEnvía un mensaje al servicio cuando cambia el resultsetresultset SqlDependencySqlDependency Abstrae el Service BrokerAbstrae el Service Broker Evento OnChangedEvento OnChanged
  • 55. Documentación disponibleDocumentación disponible Multiple Active Result Sets (MARS) in SQLMultiple Active Result Sets (MARS) in SQL Server 2005Server 2005 Christian KleinermanChristian Kleinerman -- MicrosoftMicrosoft –– OctubreOctubre 20020044 –– 119 páginas9 páginas http://msdn.microsoft.com/library/default.asp?url=/library/en-http://msdn.microsoft.com/library/default.asp?url=/library/en- us/dnsql90/html/MARSinSQL05.aspus/dnsql90/html/MARSinSQL05.asp ADO.NET and System.Xml v.2.0--The BetaADO.NET and System.Xml v.2.0--The Beta Version 2ªedVersion 2ªed Alex Homer, David Sussman, Mark FussellAlex Homer, David Sussman, Mark Fussell Addison WesleyAddison Wesley –– MarzoMarzo 20020055 –– 560560 páginaspáginas (cap.muestra – 38 págs.)(cap.muestra – 38 págs.) http://www.awprofessional.com/content/images/0321247124/samplechahttp://www.awprofessional.com/content/images/0321247124/samplecha http://www.daveandal.net/books/7124/http://www.daveandal.net/books/7124/ (código)(código)
  • 56. Mejoras en ADO.NETMejoras en ADO.NET TransaccionesTransacciones System.TransactionsSystem.Transactions API manejada para definir transaccionesAPI manejada para definir transacciones Sin EnterpriseServices (COM+)Sin EnterpriseServices (COM+) PromotablePromotable Comienza como local (10 ms)Comienza como local (10 ms) Sigue local en accesos a SQL Server 2005Sigue local en accesos a SQL Server 2005 Sólo se promueve a DTC siSólo se promueve a DTC si Se accede a SQL Server 2000, MSMQ, Oracle…Se accede a SQL Server 2000, MSMQ, Oracle… Se acceden a dos SQL Server 2005Se acceden a dos SQL Server 2005
  • 57. Mejoras en ADO.NETMejoras en ADO.NET Transacciones (2)Transacciones (2) using (TransactionScope ts = new TransactionScope())using (TransactionScope ts = new TransactionScope()) {{ SqlConnection conn1 = new SqlConnection(SqlConnection conn1 = new SqlConnection( "server=.;integrated security=sspi;database=pubs"))"server=.;integrated security=sspi;database=pubs")) // Local tx si SQL 2005, si no distribuida// Local tx si SQL 2005, si no distribuida conn1.Open();conn1.Open(); SqlCommand cmd1 = new SqlCommand(SqlCommand cmd1 = new SqlCommand( "INSERT jobs 'job1', 10, 10", conn1);"INSERT jobs 'job1', 10, 10", conn1); cmd1.ExecuteNonQuery();cmd1.ExecuteNonQuery(); SqlConnection conn2 = new SqlConnection(SqlConnection conn2 = new SqlConnection( "server=other;integrated security=sspi;database=pubs"))"server=other;integrated security=sspi;database=pubs")) // promueve a distribuida// promueve a distribuida conn2.Open();conn2.Open(); SqlCommand cmd2 = new SqlCommand(SqlCommand cmd2 = new SqlCommand( "INSERT jobs 'job2', 10, 10", conn2);"INSERT jobs 'job2', 10, 10", conn2); cmd2.ExecuteNonQuery();cmd2.ExecuteNonQuery(); ts.Complete(); // commit transactionts.Complete(); // commit transaction }} using (TransactionScope ts = new TransactionScope())using (TransactionScope ts = new TransactionScope()) {{ SqlConnection conn1 = new SqlConnection(SqlConnection conn1 = new SqlConnection( "server=.;integrated security=sspi;database=pubs"))"server=.;integrated security=sspi;database=pubs")) // Local tx si SQL 2005, si no distribuida// Local tx si SQL 2005, si no distribuida conn1.Open();conn1.Open(); SqlCommand cmd1 = new SqlCommand(SqlCommand cmd1 = new SqlCommand( "INSERT jobs 'job1', 10, 10", conn1);"INSERT jobs 'job1', 10, 10", conn1); cmd1.ExecuteNonQuery();cmd1.ExecuteNonQuery(); SqlConnection conn2 = new SqlConnection(SqlConnection conn2 = new SqlConnection( "server=other;integrated security=sspi;database=pubs"))"server=other;integrated security=sspi;database=pubs")) // promueve a distribuida// promueve a distribuida conn2.Open();conn2.Open(); SqlCommand cmd2 = new SqlCommand(SqlCommand cmd2 = new SqlCommand( "INSERT jobs 'job2', 10, 10", conn2);"INSERT jobs 'job2', 10, 10", conn2); cmd2.ExecuteNonQuery();cmd2.ExecuteNonQuery(); ts.Complete(); // commit transactionts.Complete(); // commit transaction }}
  • 59. Documentación disponibleDocumentación disponible ADO.NET and System.TransactionsADO.NET and System.Transactions John PapaJohn Papa -- MicrosoftMicrosoft –– MSDN Magazine FebreroMSDN Magazine Febrero 20020055 –– 55 páginaspáginas http://msdn.microsoft.com/msdnmag/issues/05/02/DataPoints/defaulhttp://msdn.microsoft.com/msdnmag/issues/05/02/DataPoints/defaul t.aspxt.aspx
  • 60. BI Operaciones diversasBI Operaciones diversas SSISSSIS UDMUDM SSAS (OLAP)SSAS (OLAP) SSRSSSRS