Post on 05-Dec-2014
description
transcript
SQL Server 2005SQL Server 2005
Jordi RamblaJordi RamblaCertiaCertiaMicrosoft MVPMicrosoft MVPjordi@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 BIMentor Asociado de Solid Quality Learning Mentor Asociado de Solid Quality Learning IberoamericanaIberoamericanaMVP SQL Server MVP SQL Server Regional Director de Microsoft Regional Director de Microsoft circacirca1997-20041997-2004
Consultor de P&P,XML, ES y WS en Ciclo .NET Consultor de P&P,XML, ES y WS en Ciclo .NET UOCUOC
Certia (http://certia.ramblainf.com)Certia (http://certia.ramblainf.com)Es la marca de servicios de rambla Es la marca de servicios de rambla informàticainformà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. Itzik Ben-Gan, Kalen Delaney, Fernando G. Guerrero, Michael Hotek, Brian Moran , Ron Guerrero, Michael Hotek, Brian Moran , Ron Talmage Talmage
Iberoamericana:Iberoamericana:Miguel Egea, Alejandro Leguízamo, Jesús López, Miguel Egea, Alejandro Leguízamo, Jesús López, Pablo Pelaez, Jordi Rambla, Eladio Rincón, Daniel Pablo Pelaez, Jordi Rambla, Eladio Rincón, Daniel Seara, Guillermo Som, Antonio Soto, Adolfo Seara, Guillermo Som, Antonio Soto, Adolfo WiernikWiernik
Ayudando a obtener lo mejor de SQLServer y Ayudando a obtener lo mejor de SQLServer y .Net con.Net con
FormaciónFormación
Consultoría Consultorí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 Milán, Washington DC, Los Angeles, Chicago, Dallas, Monterrey, San Salvador, Singapore, Hong KongSalvador, Singapore, 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 ¿Qué hay de nuevo?nuevo?
¿Qué hay de nuevo?¿Qué hay de nuevo?.NET Framework.NET Framework
Common Language Runtime IntegrationCommon Language Runtime IntegrationUser-defined AggregatesUser-defined AggregatesUser-defined Data TypesUser-defined Data TypesUser-defined FunctionsUser-defined FunctionsSQL Server .NET Data ProviderSQL Server .NET Data ProviderExtended TriggersExtended Triggers
Data TypesData TypesFileStream Storage AttributeFileStream Storage AttributeManaged SQL TypesManaged SQL TypesNew XML DatatypeNew XML Datatype
SQL Server EngineSQL Server EngineNew Message Service BrokerNew Message Service BrokerHTTP Support (Native HTTP)HTTP Support (Native HTTP)Database Tuning Advisor Database Tuning Advisor Enhanced Read ahead & scanEnhanced Read ahead & scanExtended IndexesExtended IndexesMultiple Active Result Sets Multiple Active Result Sets Persisted Computed ColumnsPersisted Computed ColumnsQueuing SupportQueuing SupportSnapshot Isolation Level Snapshot Isolation Level Scale Up PartitioningScale Up PartitioningVIA support VIA support NUMA supportNUMA support
Database Failure and RedundancyDatabase Failure and RedundancyFail-over Clustering (up to 8 node)Fail-over Clustering (up to 8 node)Enhanced Multi-instance SupportEnhanced Multi-instance SupportDatabase MirroringDatabase MirroringDatabase ViewpointsDatabase Viewpoints
XMLXMLXQUERY Support (Server & Mid Tier)XQUERY Support (Server & Mid Tier)XML Data Manipulation Language XML Data Manipulation Language FOR XML EnhancementsFOR XML EnhancementsXML Schema (XSD) Support XML Schema (XSD) Support MSXML 6.0 (Native)MSXML 6.0 (Native).Net XML Framework.Net XML Framework
Database MaintenanceDatabase MaintenanceBackup and Restore EnhancementsBackup and Restore EnhancementsChecksum Integrity ChecksChecksum Integrity ChecksDedicated Administrator ConnectionDedicated Administrator ConnectionDynamic AWEDynamic AWEFast RecoveryFast RecoveryHighly-available UpgradeHighly-available UpgradeOnline Index OperationsOnline Index OperationsOnline RestoreOnline RestoreParallel DBCCParallel DBCCParallel Index OperationsParallel Index Operations
Management ToolsManagement ToolsMDX Query EditorMDX Query EditorMDX IntellisenseMDX IntellisenseT-SQL IntellisenseT-SQL IntellisenseVersion Control SupportVersion Control SupportXML/AXML/ASQLCMD Command Line ToolSQLCMD Command Line Tool
Performance TuningPerformance Tuning Profiler EnhancementsProfiler EnhancementsProfiling Analysis ServicesProfiling Analysis ServicesExportable Showplan Exportable Showplan Exportable Deadlock TracesExportable Deadlock Traces
Full-text SearchFull-text SearchIndexing of XML DatatypeIndexing of XML Datatype
MDAC MDAC Side by Side installationSide by Side installationMicrosoft Installer base setupMicrosoft Installer base setupSupport for Active Directory DeploymentSupport for Active Directory Deployment
SQL Client .NET Data ProviderSQL Client .NET Data ProviderServer Cursor SupportServer Cursor SupportAsynchAsynch
SecuritySecurityAll Permissions GrantableAll Permissions GrantableFine Grain Administration RightsFine Grain Administration RightsSeparation of Users and SchemaSeparation of Users and Schema
ReplicationReplicationAuto-tuning Replication AgentsAuto-tuning Replication AgentsOracle PublicationOracle PublicationImproved Blob Change TrackingImproved Blob Change Tracking
OLAP and Data MiningOLAP and Data MiningAnalysis Management Objects Analysis Management Objects Windows Integrated Backup and RestoreWindows Integrated Backup and RestoreWeb Service/XML for AnalysisWeb Service/XML for AnalysisDTS and DM IntegrationDTS and DM IntegrationEight new DM algorithmsEight new DM algorithmsAuto Packaging and DeploymentAuto Packaging and Deployment
Data Transformation ServicesData Transformation ServicesNew Architecture (DTR + DTP)New Architecture (DTR + DTP)Complex Control FlowsComplex Control FlowsControl Flow DebuggingControl Flow DebuggingFor Each EnumerationsFor Each EnumerationsProperty MappingsProperty MappingsFull Data Flow DesignerFull Data Flow DesignerFull DTS Control Flow DesignerFull DTS Control Flow DesignerGraphical Presentation of Pkg ExecutionGraphical Presentation of Pkg ExecutionImmediate Mode and Project ModeImmediate Mode and Project ModePackage (Advanced) Deployment ToolsPackage (Advanced) Deployment ToolsCustom Tasks and TransformationsCustom Tasks and Transformations
Reporting ServicesReporting ServicesMultiple Output Formats Multiple Output Formats Parameters (Static, Dynamic, Hierarchical)Parameters (Static, Dynamic, Hierarchical)Bulk Delivery of Personalized ContentBulk Delivery of Personalized ContentSupport Multiple Data Sources Support Multiple Data Sources STS (Web Parts, Doc Libraries)STS (Web Parts, Doc Libraries)Visual Design ToolVisual Design ToolCharting, Sorting, Filtering, Drill-ThroughCharting, Sorting, Filtering, Drill-ThroughScheduling, CachingScheduling, CachingComplete Scripting EngineComplete Scripting EngineScale Out architectureScale Out architectureOpen XML Report DefinitionOpen XML Report Definition
Notification ServicesNotification Services
OtrosOtrosserviciosservicios
OtrosOtrosserviciosservicios
¿Qué hay de nuevo?¿Qué hay de nuevo?ContextoContexto
OS OS ServicesServices
BizBizTier LogicTier Logic
BizBizTier LogicTier Logic
Servicios SOServicios SOServicios SOServicios SO
XMLXML
XMLXML
XMLXML
HTMLHTML
XMLXML
XMLXML
BrowsersBrowsersestándarestándar
BrowsersBrowsersestándarestándar
DispositivosDispositivosmóvilesmóviles
DispositivosDispositivosmóvilesmóviles
ClientesClientesinteligentesinteligentes
ClientesClientesinteligentesinteligentes
Lógica aplicaciónLógica aplicaciónLógica aplicaciónLógica aplicación
Servicios Servicios WebWeb
Servicios Servicios WebWeb
OtrosOtrosserviciosservicios
OtrosOtrosserviciosservicios
ServiciosServiciosbuilding blocksbuilding blocks
ServiciosServiciosbuilding blocksbuilding blocks
Formularios Formularios WebWeb
Formularios Formularios WebWeb
ServiciosServiciosbuilding blocksbuilding blocks
ServiciosServiciosbuilding blocksbuilding blocks
OtrosOtrosserviciosservicios
OtrosOtrosserviciosservicios
OtrosOtrosserviciosservicios
OtrosOtrosserviciosservicios
¿Qué hay de nuevo?¿Qué hay de nuevo?ContextoContexto
OS OS ServicesServices
BizBizTier LogicTier Logic
BizBizTier LogicTier Logic
Servicios SOServicios SOServicios SOServicios SO
XMLXML
XMLXML
XMLXML
HTMLHTML
XMLXML
XMLXML
BrowsersBrowsersestándarestándar
BrowsersBrowsersestándarestándar
DispositivosDispositivosmóvilesmóviles
DispositivosDispositivosmóvilesmóviles
ClientesClientesinteligentesinteligentes
ClientesClientesinteligentesinteligentes
Lógica aplicaciónLógica aplicaciónLógica aplicaciónLógica aplicación
Servicios Servicios WebWeb
Servicios Servicios WebWeb
Formularios Formularios WebWeb
Formularios Formularios WebWeb
Integración con .NETIntegración con .NET
Integración con .NETIntegración con .NETAlternativa a T-SQLAlternativa a T-SQL
Funciones Funciones definidas por el definidas por el
usuariousuario
Procedimientos Procedimientos almacenadosalmacenados
TriggersTriggers
Tipos definidos Tipos definidos por el usuariopor el usuario
AggregatesAggregates
T-SQLT-SQL Lenguajes .NELenguajes .NETT
Integración con .NETIntegración con .NETCreaciónCreación
Registro de assembliesRegistro de assembliesAlmacenados en la base de datosAlmacenados en la base de datos
CREATE ASSEMBLY CREATE ASSEMBLY NombreAssemblyNombreAssembly FROM FROM c:\assembly.dllc:\assembly.dllCREATE ASSEMBLY CREATE ASSEMBLY NombreAssemblyNombreAssembly FROM FROM c:\assembly.dllc:\assembly.dll
ReferenciasReferenciasSe 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 .NETCreación (II)Creación (II)
Definición de:Definición de:UDFs, procedimientos almacenados, UDFs, procedimientos almacenados, triggerstriggers
Enlazando a función estática y públicaEnlazando a función estática y pública
UDTs, aggregatesUDTs, aggregatesEnlazando a claseEnlazando a clase
CREATE FUNCTION CREATE FUNCTION NombreFuncionNombreFuncion () RETURNS int () RETURNS int
AS EXTERNAL NAME AS EXTERNAL NAME NombreAssembly.[clase]:funcionNombreAssembly.[clase]:funcion
CREATE FUNCTION CREATE FUNCTION NombreFuncionNombreFuncion () RETURNS int () RETURNS int
AS EXTERNAL NAME AS EXTERNAL NAME NombreAssembly.[clase]:funcionNombreAssembly.[clase]:funcion
Integración con .NETIntegración con .NETSeguridadSeguridad
CAS deja de tener validezCAS deja de tener validez
Tres nuevos niveles gestionados por Tres nuevos niveles gestionados por SQLSQL
SafeSafe
ExternalExternal
UnsafeUnsafe
Validados al dar de alta el assemblyValidados al dar de alta el assemblyEj. Type safe, finalizers, mutable statics…Ej. Type safe, finalizers, mutable statics…
Llamadas al BCL restringidasLlamadas al BCL restringidasNuevo atributo HostProtectionAttributeNuevo atributo HostProtectionAttribute
Integración con .NETIntegración con .NETAcceso a datosAcceso a datos
Comunicación mediante SqlAccess.dllComunicación mediante SqlAccess.dllSystem.Data.SqlSystem.Data.Sql
Proveedor ADO.NET Proveedor ADO.NET inprocessinprocessAcceso 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 Procedimiento almacenado en .NETen .NET
Documentación disponibleDocumentación disponible
Using CLR Integration in SQL Server Using CLR Integration in SQL Server 2005 2005
Balaji RathakrishnanBalaji RathakrishnanChristian KleinermanChristian KleinermanBrad RichardsBrad RichardsRamachandran VenkateshRamachandran VenkateshVineet Rao Vineet Rao
Microsoft – Noviembre 2004 – 41 páginasMicrosoft – Noviembre 2004 – 41 páginas
http://msdn.microsoft.com/SQL/2005/2005Articles/http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/library/en-us/dnsql90/html/default.aspx?pull=/library/en-us/dnsql90/html/sqlclrguidance.aspsqlclrguidance.aspManaged Data Access Inside SQL Server Managed Data Access Inside SQL Server
with ADO.NET and SQLCLRwith ADO.NET and SQLCLRPablo CastroPablo Castro - - MicrosoftMicrosoft – – AbrilAbril 200 20055 – – 2626 páginas páginas
http://msdn.microsoft.com/library/default.asp?url=/library/http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/mandataaccess.aspen-us/dnsql90/html/mandataaccess.asp
XML y SQL Server 2005XML y SQL Server 2005
XML y SQL Server 2005XML y SQL Server 2005NovedadesNovedades
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 2005Nuevo tipo XMLNuevo tipo XML
Almacena documentos XMLAlmacena documentos XMLPuede 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)
EscenariosEscenariosInformación complejaInformación compleja
Datos semiestructuradosDatos semiestructurados
Gestión documental (ej. e-mail), mensajería Gestión documental (ej. e-mail), mensajería (SOAP)(SOAP)
Intercambio de documentos (B2B, B2C…)Intercambio de documentos (B2B, B2C…)
XML y SQL Server 2005XML y SQL Server 2005EsquemasEsquemas
Los campos XML pueden asociarse con Los 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 Esquemas almacenados en la base de datosdatosCREATE 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 2005Acceso a campos XMLAcceso a campos XML
XQUERYXQUERYStandard W3C (Last Call Working Draft Standard W3C (Last Call Working Draft 4/4/2005)4/4/2005)
Con extensiones para la actualizaciónCon extensiones para la actualización
Basado en XPathBasado en XPathMucha 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 2005XQuery desde T-SQLXQuery desde T-SQL
xml.query: devuelve un tipo XMLxml.query: devuelve un tipo XML
xml.exist: devuelve un booleano si hay xml.exist: devuelve un booleano si hay resultadoresultado
xml.value: devuelve un valor simple (escalar)xml.value: devuelve un valor simple (escalar)
xml.nodes: devuelve una tabla con una xml.nodes: devuelve una tabla con una columnacolumna
xml.modifyxml.modify: : modifica el XMLmodifica el XMLSELECT 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 2005T-SQL desde XQueryT-SQL desde XQuery
sql:variablesql:variableAcceso a variables T-SQL desde XqueryAcceso a variables T-SQL desde Xquery
sql:columnsql:columnAcceso a la columna a la que pertenece el Acceso a la columna a la que pertenece el XMLXMLselect 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 Pueden definirse índices en columnas XMLXML
Aceleran las sentencias XQueryAceleran las sentencias XQuery
Cuatro tiposCuatro tiposPRIMARY: 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 XML Options in Microsoft SQL Server 2005Server 2005
Microsoft – Enero 2005 – 34 páginasMicrosoft – Enero 2005 – 34 páginas
http://msdn.microsoft.com/SQL/2005/2005Articles/http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/library/en-us/dnsql90/html/default.aspx?pull=/library/en-us/dnsql90/html/sql2k5xmloptions.aspsql2k5xmloptions.aspXML Support in Microsoft SQL XML Support in Microsoft SQL
Server 2005Server 2005 Shankar Pal, Mark Fussell, Irwin DolobowskyShankar Pal, Mark Fussell, Irwin Dolobowsky
Microsoft Corporation – Mayo 2004 – 39 páginasMicrosoft Corporation – Mayo 2004 – 39 páginas
http://msdn.microsoft.com/SQL/2005/2005Articles/http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/library/en-us/dnsql90/html/sql2k5xml.aspdefault.aspx?pull=/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íncronaImplementado 100% en SQL ServerImplementado 100% en SQL Server
DestinatariosDestinatariosLa misma BBDDLa misma BBDDOtra BBDD en la misma instancia o en otra Otra BBDD en la misma instancia o en otra instanciainstanciaOtro servidor SQL Server remotoOtro servidor SQL Server remoto
IncluyeIncluyeNuevos objetosNuevos objetosNuevas sentencias T-SQLNuevas sentencias T-SQL
Utilizado internamente en SQL Server 2005Utilizado internamente en SQL Server 2005Query NotificationsQuery NotificationsEvent NotificationsEvent Notifications
Lo pueden usar otras aplicacionesLo pueden usar otras aplicaciones
Service BrokerService BrokerY con éste ya van 4…Y con éste ya van 4…
MSMQMSMQNecesita usar DTC para transacciones con Necesita usar DTC para transacciones con BDBD
No garantiza ordenamiento de mensajesNo garantiza ordenamiento de mensajes
Biztalk messagingBiztalk messagingIncorpora orquestaciónIncorpora orquestación
Automatiza procesoAutomatiza proceso
Indigo messagingIndigo messagingEs interoperableEs interoperable
Mensajería asíncrona Mensajería asíncrona (¿Cómo dice?)(¿Cómo dice?)
Usamos una cola para:Usamos una cola para:Que el proceso deje un Que el proceso deje un mensajemensaje en la cola en la cola y recupere inmediatamente el control del y recupere inmediatamente el control del proceso (proceso (asincroníaasincronía))
El software de gestión de colas se encarga El software de gestión de colas se encarga de gestionar la entrega de ese mensaje en de gestionar la entrega de ese mensaje en su destinosu destino
Con todos los matices adicionales (persistencia, Con todos los matices adicionales (persistencia, garantía, secuencia, entrega única, transacción, garantía, secuencia, entrega única, transacción, trazabilidad…)trazabilidad…)
Esas son las diferencias con un socket TCPEsas son las diferencias con un socket TCP
El receptor puede procesar los mensajes a El receptor puede procesar los mensajes a su conveniencia (con/sin prioridad, p.e.)su conveniencia (con/sin prioridad, p.e.)
Mensajería asíncrona Mensajería asíncrona (¿Dónde está el truco?)(¿Dónde está el truco?)
Es necesario disponer del software Es necesario disponer del software cliente de la cola y de un servidorcliente de la cola y de un servidorEs necesario “diseñar/definir” una serie Es necesario “diseñar/definir” una serie de mensajes y de diálogos entre de mensajes y de diálogos entre emisores y receptoresemisores y receptoresSi se utiliza en muchas aplicacionesSi se utiliza en muchas aplicaciones
Definimos un “canal” para cada cola Definimos un “canal” para cada cola (muchas)(muchas)Mezclamos varias comunicaciones en una Mezclamos varias comunicaciones en una misma cola (control)misma cola (control)
En algunos aspectos es similar a una En algunos aspectos es similar a una conexión a la BBDD (abrir/cerrar, coste, conexión a la BBDD (abrir/cerrar, coste, estado, …)estado, …)
Service BrokerService BrokerMensajesMensajes
Unidad de comunicaciónUnidad de comunicación
Tres tiposTres tiposBinariosBinarios
CabeceraCabecera
XML (tipados o sin tipar)XML (tipados o sin tipar)
CREATE MESSAGE TYPE CREATE MESSAGE TYPE [http://www.company.com/messages/Invoice][http://www.company.com/messages/Invoice]
VALIDATION = VALID_XML VALIDATION = VALID_XML
WITH SCHEMA COLLECTION invoice_xsdWITH SCHEMA COLLECTION invoice_xsd
CREATE MESSAGE TYPE CREATE MESSAGE TYPE [http://www.company.com/messages/Invoice][http://www.company.com/messages/Invoice]
VALIDATION = VALID_XML VALIDATION = VALID_XML
WITH SCHEMA COLLECTION invoice_xsdWITH SCHEMA COLLECTION invoice_xsd
Service BrokerService BrokerContratosContratos
Define los mensajes que se pueden Define los mensajes que se pueden intercambiarintercambiar
CREATE CONTRACT CREATE 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 CONTRACT CREATE 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 BrokerColasColas
Puntos de entrada a los serviciosPuntos de entrada a los serviciosPueden 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 BrokerServiciosServicios
Funcionalidad expuesta en las colasFuncionalidad expuesta en las colas
Compuesto porCompuesto porUna 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 BrokerEnvío de mensajesEnvío de mensajes
1.- Creación del diálogo1.- Creación del diálogoUn diálogo ordena y correlaciona los Un diálogo ordena y correlaciona los mensajesmensajes
2.- Envío del mensaje2.- Envío del mensajeMediante comando SENDMediante comando SENDSET @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 BrokerRecepción de mensajesRecepción de mensajes
Comando RECEIVEComando RECEIVEEspecifica 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 60000 TIMEOUT 60000
WAITFOR ( WAITFOR (
RECEIVE * RECEIVE *
FROM ExpenseQueue), FROM ExpenseQueue),
TIMEOUT 60000 TIMEOUT 60000
Colas simplesColas simples
Documentación disponibleDocumentación disponible
An Introduction to SQL Server An Introduction to SQL Server Service BrokerService Broker
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ásicosA First Look at SQL Server 2005 A First Look at SQL Server 2005 Service BrokerService Broker
Roger Wolter – Julio 2004 – 20 páginasRoger Wolter – Julio 2004 – 20 páginas
http://msdn.microsoft.com/SQL/2005/2005Articles/default.ashttp://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/library/en-us/dnsql90/html/sqlsvcbroker.asppx?pull=/library/en-us/dnsql90/html/sqlsvcbroker.asp
Conceptos y ejemplos de códigoConceptos y ejemplos de código
Mejoras en T-SQLMejoras en T-SQL
Mejoras en T-SQLMejoras en T-SQLControl de excepcionesControl de excepciones
Se acabó el acceso a @@ERRORSe acabó el acceso a @@ERROR
Bloques TRY…CATCHBloques TRY…CATCHAnidablesAnidables
Nuevas funciones disponibles en el CATCHNuevas funciones disponibles en el CATCHERROR_NUMBER, ERROR_MESSAGE…ERROR_NUMBER, ERROR_MESSAGE…
BEGIN TRY BEGIN TRY
SELECT * FROM authorsSELECT * FROM authors
END TRYEND TRY
BEGIN CATCHBEGIN CATCH
SELECT ERROR_NUMBER()SELECT ERROR_NUMBER()
END CATCHEND CATCH
BEGIN TRY BEGIN 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-SQLCommon Table ExpressionsCommon Table Expressions
Resultset temporalResultset temporalSólo vive en la sentencia actualSólo vive en la sentencia actual
WITH mid ASWITH mid AS
((
SELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midval SELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midval from production.productfrom production.product
))
SELECT * FROM Production.Product, midSELECT * FROM Production.Product, mid
WHERE ListPrice > midval WHERE ListPrice > midval
WITH mid ASWITH mid AS
((
SELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midval SELECT (MAX(ListPrice) + MIN(ListPrice))/2 as midval from production.productfrom production.product
))
SELECT * FROM Production.Product, midSELECT * FROM Production.Product, mid
WHERE ListPrice > midval WHERE ListPrice > midval
Mejor que las subqueries si hay varias Mejor que las subqueries si hay varias igualesiguales
Admite recursividadAdmite recursividad
Mejoras en T-SQLMejoras en T-SQLRankingRanking
Añade una columna basada en rankingsAñade una columna basada en rankingsROW_NUMBERROW_NUMBER
RANKRANK
DENSE_RANKDENSE_RANK
NTILE (n)NTILE (n)
Pueden agruparse en particionesPueden agruparse en particionesPARTITION BYPARTITION BY
Mejoras en T-SQLMejoras en T-SQLRanking (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-SQLOtrasOtras
PivotPivotConvierte filas a columnasConvierte filas a columnas
OUTPUTOUTPUTPermite especificar una salida a sentencias Permite especificar una salida a sentencias de actualización distinta al número de filasde actualización distinta al número de filas
Ej. Registros borrados, identities, etc.Ej. Registros borrados, identities, etc.
Aislamiento snapshotAislamiento snapshotEscritores no bloquean a lectoresEscritores no bloquean a lectores
Mejoras en T-SQLMejoras en T-SQLRanking (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 INTqty 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 INTqty 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-SQLOtras (2)Otras (2)
DRIDRISET 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
TOPTOPPermite expresionesPermite expresiones
También para actualizacionesTambién para actualizaciones
T-SQLT-SQL
Documentación disponibleDocumentación disponible
SQL Server 2005 Beta 2 Transact-SQL Server 2005 Beta 2 Transact-SQL EnhancementsSQL Enhancements
Itzik Ben-GanItzik Ben-Gan – S– Solid Quality Learningolid Quality Learning
DiciembreDiciembre 200 20044 – – 4949 páginas páginas
http://msdn.microsoft.com/library/en-us/dnsql90/html/http://msdn.microsoft.com/library/en-us/dnsql90/html/sql_05TSQLEnhance.aspsql_05TSQLEnhance.asp
SQL Server 2005 Beta 2 Snapshot SQL Server 2005 Beta 2 Snapshot IsolationIsolation
Kimberly L. Tripp - SQLSkills.com – Febrero 2005 – 59 Kimberly L. Tripp - SQLSkills.com – Febrero 2005 – 59 páginaspáginas
http://msdn.microsoft.com/SQL/2005/2005Articles/http://msdn.microsoft.com/SQL/2005/2005Articles/default.aspx?pull=/library/en-us/dnsql90/html/default.aspx?pull=/library/en-us/dnsql90/html/sql2k5snapshotisol.aspsql2k5snapshotisol.asp
Hands On Lab 115Hands On Lab 115 MicrosoftMicrosoft - - 1818 páginas páginas
Kit de recursos Beta 2 Kit de recursos Beta 2
Mejoras en ADO.NETMejoras en ADO.NET
para SQL Server 2005para SQL Server 2005
Mejoras en ADO.NETMejoras en ADO.NETMARSMARS
Múltiples resultsets y transacciones Múltiples resultsets y transacciones simultáneas por conexiónsimultáneas por conexión
SqlCommand cmd = new SqlCommand("select * from SqlCommand cmd = new SqlCommand("select * from authors",conn);authors",conn);
SqlCommand cmd2 = new SqlCommand("select * from SqlCommand 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 * from SqlCommand cmd = new SqlCommand("select * from authors",conn);authors",conn);
SqlCommand cmd2 = new SqlCommand("select * from SqlCommand 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.NETDependencias SQLDependencias SQL
Notificación cuando cambia un Notificación cuando cambia un resultsetresultsetÚtil para invalidar caché o vistasÚtil para invalidar caché o vistas
Basado en Service BrokerBasado en Service BrokerSqlNotificationRequestSqlNotificationRequest
Recibe un objeto comando y un servicioRecibe un objeto comando y un servicio
Envía un mensaje al servicio cuando cambia el Envía un mensaje al servicio cuando cambia el resultsetresultset
SqlDependencySqlDependencyAbstrae el Service BrokerAbstrae el Service Broker
Evento OnChangedEvento OnChanged
NotificacionesNotificaciones
Documentación disponibleDocumentación disponible
Multiple Active Result Sets (MARS) in Multiple Active Result Sets (MARS) in SQL Server 2005SQL Server 2005
Christian KleinermanChristian Kleinerman - - MicrosoftMicrosoft – – OctubreOctubre 200 20044 – – 119 páginas9 páginas
http://msdn.microsoft.com/library/default.asp?url=/library/http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/MARSinSQL05.aspen-us/dnsql90/html/MARSinSQL05.asp
ADO.NET and System.Xml v.2.0--The ADO.NET and System.Xml v.2.0--The Beta Version 2ªedBeta Version 2ªed
Alex Homer, David Sussman, Mark FussellAlex Homer, David Sussman, Mark Fussell
Addison WesleyAddison Wesley – – Marzo Marzo 20020055 – – 560 560 páginaspáginas (cap.muestra – (cap.muestra – 38 págs.)38 págs.)
http://www.awprofessional.com/content/images/0321247124/http://www.awprofessional.com/content/images/0321247124/samplechapter/homer_ch05.pdfsamplechapter/homer_ch05.pdf
http://www.daveandal.net/books/7124/http://www.daveandal.net/books/7124/ (código) (código)
Mejoras en ADO.NETMejoras en ADO.NETTransaccionesTransacciones
System.TransactionsSystem.TransactionsAPI manejada para definir transaccionesAPI manejada para definir transacciones
Sin EnterpriseServices (COM+)Sin EnterpriseServices (COM+)
PromotablePromotableComienza 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 siSe 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.NETTransacciones (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"))
// pr// proomueve a distribuidamueve 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.Cots.Complete()mplete(); // commit transaction ; // 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"))
// pr// proomueve a distribuidamueve 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.Cots.Complete()mplete(); // commit transaction ; // commit transaction
}}
TransaccionesTransacciones
Documentación disponibleDocumentación disponible
ADO.NET and System.TransactionsADO.NET and System.Transactions John Papa John Papa - - MicrosoftMicrosoft – – MSDN Magazine FebreroMSDN Magazine Febrero 200 20055 – – 55 páginaspáginas
http://msdn.microsoft.com/msdnmag/issues/05/02/http://msdn.microsoft.com/msdnmag/issues/05/02/DataPoints/default.aspxDataPoints/default.aspx
BI Operaciones diversasBI Operaciones diversasSSISSSISUDMUDMSSAS (OLAP) SSAS (OLAP) SSRSSSRS
jordi@ramblainf.comjordi@ramblainf.com