<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Marcos Palacios - IT</title><link>http://geeks.ms/blogs/mpalacios/default.aspx</link><description>Toda la información de IT, especialmente en referencia a .Net</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Orientación a objetos con JavaScript</title><link>http://geeks.ms/blogs/mpalacios/archive/2010/05/06/orientacion-objetos-javascript.aspx</link><pubDate>Thu, 06 May 2010 07:00:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:176318</guid><dc:creator>Marcos Palacios</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/mpalacios/rsscomments.aspx?PostID=176318</wfw:commentRss><comments>http://geeks.ms/blogs/mpalacios/archive/2010/05/06/orientacion-objetos-javascript.aspx#comments</comments><description>&lt;p&gt;Hoy en dia es impesable una programaci&amp;oacute;n compleja sin una orientaci&amp;oacute;n a objetos, pudiendo delegar a estos una estructura (propiedades o atributos) y unas acciones a realizar (funciones). Pues llega la hora de aplicar este conocimiento a javascript, donde muchos de nosotros solemos hacer una programaci&amp;oacute;n m&amp;aacute;s lineal y poco estructurada, pero hay momentos que por su complejidad es necesario aplicar esta. &lt;/p&gt;
&lt;p&gt;Vamos a ver unos ejemplos de programaci&amp;oacute;n orientada a objetos con BLOCKED SCRIPT&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Clase con 2 atributos:&lt;/b&gt;&lt;/p&gt;
&lt;div class="codigo"&gt;
function Clase() {
&lt;div style="padding-left:30px;"&gt;this.Atributo1 = 0;
&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;    this.Atributo2 = &amp;#39;&amp;#39;;
&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;}&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;var ObjetoDeTipoClase = new Clase();
&lt;/div&gt;
&lt;div&gt;ObjetoDeTipoClase.Atributo1 =1;
&lt;/div&gt;
&lt;div&gt;alert(ObjetoDeTipoClase.Atributo2);
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Clase con 2 atributos y 2 funciones:&lt;/b&gt;&lt;/p&gt;
&lt;div class="codigo"&gt;
function Clase() {
&lt;div style="padding-left:30px;"&gt;
    this.Atributo1 = 0;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;
    this.Atributo2 = &amp;#39;&amp;#39;;
&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;this.Accion1=funtion(){
&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;           this.Atributo2+=&amp;quot;Accion sin parametros&amp;quot;;
&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;           }
    &lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;this.Accion2=function(Parametro1){&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;
           this.Atributo1=2*3;&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;
           }&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
var ObjetoDeTipoClase = new Clase();&lt;/div&gt;
&lt;div&gt;
ObjetoDeTipoClase.Atributo1 =1;
&lt;/div&gt;
&lt;div&gt;alert(ObjetoDeTipoClase.Atributo2);
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Clase est&amp;aacute;tica:&lt;/b&gt;&lt;/p&gt;
&lt;div class="codigo"&gt;
var Gestor= {
&lt;div style="padding-left:30px;"&gt;
    Delete: function(Id) {
&lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;        itemActual = new Clase();
        &lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;itemActual.Accion2();
        &lt;/div&gt;
&lt;div style="padding-left:60px;"&gt;&amp;nbsp;}&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;
}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;Gestor.Delete(1);
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Espero que estos ejemplos os sean de utilidad.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=176318" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mpalacios/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>SolR, the great search engine</title><link>http://geeks.ms/blogs/mpalacios/archive/2010/05/05/solr-the-great-search-engine.aspx</link><pubDate>Wed, 05 May 2010 07:14:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:176141</guid><dc:creator>Marcos Palacios</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/mpalacios/rsscomments.aspx?PostID=176141</wfw:commentRss><comments>http://geeks.ms/blogs/mpalacios/archive/2010/05/05/solr-the-great-search-engine.aspx#comments</comments><description>&lt;p&gt;Como ser tan r&amp;aacute;pido buscando como google, como poder realizar b&amp;uacute;squeda sem&amp;aacute;ticas sobre una gran cantidad de texto, y si encima quieres diferenciar el idioma, se te ocurre alg&amp;uacute;n otro tipo de b&amp;uacute;squeda, geografica, ya sea por radio o cuadrangular, saber a que distancia est&amp;aacute; el punto, y todo ello sin picar una l&amp;iacute;nea de c&amp;oacute;digo, lo que buscas es SolR.&lt;/p&gt;
&lt;p&gt;Desde hace m&amp;aacute;s de dos a&amp;ntilde;os estoy trabajando con Lucene .Net que ofrecia muchas de estas caracter&amp;iacute;sticas, pero debido a problemas a la hora de trabajar con indices grandes (&amp;gt;2Gb), principalmente lentitud a la hora de calcular &amp;quot;Facets&amp;quot; (t&amp;iacute;pico group by de sql utilizado para b&amp;uacute;squedas guiadas Ejemplo: 1223 articulos de .net / 233 articulos de java / 43 articulos de sql server...) se tuvo que empezar a investigar en otras tecnologias. SolR es un motor java que trabaja sobre Lucene versi&amp;oacute;n java que siempre esta m&amp;aacute;s actualizado que la versi&amp;oacute;n .Net, sobre la cual podemos trabajar via peticiones http, casi como si fuera un Web Service. Vamos a describir r&amp;aacute;pidamente las ventajas y vamos a explicar como hacer el hello world de este tipo de b&amp;uacute;squedas.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Caminando hacia el &amp;quot;Hello world de Solr&amp;quot;:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;1. Descargar SolR (&lt;a target="_blank" title="Descargar SolR" href="http://apache.rediris.es/lucene/solr/1.4.0/apache-solr-1.4.0.zip"&gt;aqu&amp;iacute;&lt;/a&gt;)&lt;br /&gt;2. Verifica que tienes java instalado, para ello ejecuta&amp;gt; &amp;quot;cmd&amp;quot; y dentro de la pantalla &amp;quot;java -version&amp;quot;, sino obtienes respuesta descargalo &lt;a target="_blank" title="Descargar Java" href="http://www.java.com/es/download/"&gt;aqu&amp;iacute;&lt;/a&gt;.&lt;br /&gt;3. Descomprime los ficheros de SolR&lt;br /&gt;4. Ves al directorio example&lt;br /&gt;5. Ejecuta &amp;quot;java -jar start.jar&amp;quot;&lt;br /&gt;6. Ya puedes hacer una petici&amp;oacute;n a tu SolR, f&amp;aacute;cil verdad: &lt;a href="http://localhost:8983/solr/admin/"&gt;http://localhost:8983/solr/admin/&lt;/a&gt;
 &lt;/p&gt;
&lt;pre class="code"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=176141" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mpalacios/archive/tags/SolR/default.aspx">SolR</category></item><item><title>Serializar y Deserializar .Net</title><link>http://geeks.ms/blogs/mpalacios/archive/2010/05/04/serializar-y-deserializar-net.aspx</link><pubDate>Tue, 04 May 2010 08:00:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:176139</guid><dc:creator>Marcos Palacios</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/mpalacios/rsscomments.aspx?PostID=176139</wfw:commentRss><comments>http://geeks.ms/blogs/mpalacios/archive/2010/05/04/serializar-y-deserializar-net.aspx#comments</comments><description>&lt;p&gt;Serializar a xml y Deserializar a objetos es una acci&amp;oacute;n muy &amp;uacute;til en programaci&amp;oacute;n, pero lo que es muy &amp;uacute;til, es tener un c&amp;oacute;digo que te permita realizar esta acci&amp;oacute;n en todos tus objetos de .Net. La aplicaci&amp;oacute;n de este tipo de utilidades es muy &amp;uacute;til para la comunicaci&amp;oacute;n cliente-servidor, guardar datos en disco de una manera estructura, o visualizaci&amp;oacute;n de datos en estilo xml.&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; el c&amp;oacute;digo:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;SERIALIZACI&amp;Oacute;N&lt;/b&gt;&lt;/p&gt;
&lt;div class="codigo"&gt;
public static string Serialize(object pBenefit)
&lt;br /&gt;{
&lt;br /&gt;System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(pBenefit.GetType());
&lt;br /&gt;System.Text.StringBuilder sb = new System.Text.StringBuilder();
&lt;br /&gt;System.IO.StringWriter writer = new System.IO.StringWriter(sb);&lt;br /&gt;
ser.Serialize(writer, pBenefit);&lt;br /&gt;
return sb.ToString();&lt;br /&gt;
}&lt;/div&gt;
&lt;p&gt;&lt;b&gt;DESERIALIZACI&amp;Oacute;N&lt;/b&gt;&lt;/p&gt;
&lt;div class="codigo"&gt;
public static object Deserialize(string lXml, Type lType)&lt;br /&gt;
{&lt;br /&gt;
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
&lt;br /&gt;doc.LoadXml(lXml);
&lt;br /&gt;System.Xml.XmlNodeReader reader = new System.Xml.XmlNodeReader(doc.DocumentElement);
&lt;br /&gt;System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(lType);
&lt;br /&gt;object obj = ser.Deserialize(reader);
&lt;br /&gt;return obj;
&lt;br /&gt;}
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=176139" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mpalacios/archive/tags/.Net/default.aspx">.Net</category></item><item><title>100% CPU w3wp.exe</title><link>http://geeks.ms/blogs/mpalacios/archive/2010/03/01/100-cpu-w3wp-exe.aspx</link><pubDate>Mon, 01 Mar 2010 09:00:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:168422</guid><dc:creator>Marcos Palacios</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/mpalacios/rsscomments.aspx?PostID=168422</wfw:commentRss><comments>http://geeks.ms/blogs/mpalacios/archive/2010/03/01/100-cpu-w3wp-exe.aspx#comments</comments><description>&lt;p&gt;Este es un problema al que alguna vez muchos de nosotros nos hemos tenido que enfrentar, yo hacia casi 3 a&amp;ntilde;os que no ten&amp;iacute;a este problema, pero este &amp;uacute;ltimo mes ha resultado que me ha sucedido en 2 ocasiones en 2 proyectos totalmente diferentes, de empresas diferentes y ambos estables (1 lleva un a&amp;ntilde;o trabajando con una gran cantidad de usuarios y otro m&amp;aacute;s de 4 sin dar ning&amp;uacute;n problema).&lt;/p&gt;
&lt;p&gt;&amp;iquest;Como actuar? &amp;iquest;Que hacer? &amp;iquest;Es software o hardware? Estas son las preguntas t&amp;iacute;picas cuando detectamos este problema, voy a intentar describir unos pasos para poder determinar el porqu&amp;eacute; del problema.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Sintoma:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; El proceso w3wp.exe automenta el consumo de CPU, muchas veces sin ningun tipo de pauta, sube, baja pero siempre vuelve durante mucho rato a un excesivo uso de CPU.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Identificar que falla:&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. Primeramente hemos de indentificar que site es la que nos esta dando problemas, para ello crearemos si no lo tenemos ya, un pool para cada una. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. Ejecutamos el comando &amp;#39;iisapp&amp;#39; en caso de estar en un entorno Win 2003 o si estamos en un entorno Win 2008, nos vamos directamente al IIS y clicamos sobre Worker Process.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. Llegados a este punto sabemos que aplicaci&amp;oacute;n nos esta dando problemas.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4. Ahora podriamos plantearnos si hemos realizado alg&amp;uacute;n cambio reciente, o si este problema se ha originado a una hora concreta, debiendo revisar a que hora comenzo y con que proceso tiene relaci&amp;oacute;n.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5. Utilizar una herramienta para determinar que esta haciendo subir la CPU, normalente, la CPU sube porque estamos haciendole hacer a la m&amp;aacute;quina m&amp;aacute;s c&amp;aacute;lculos de los normales, o alguno de ellos tiene un coste excesivo. Encontrar donde se encuentra este fallo, es la dificultad. Yo he utilizado 2 herramientas, logparser y JetBrains para localizar el problema.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a target="_blank" title="Log Parser" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en"&gt;LOGPARSER:&lt;/a&gt;&lt;br /&gt;Es una aplicaci&amp;oacute;n que nos permite parsear el log del IIS, pudiendo determinar que p&amp;aacute;gina es la que m&amp;aacute;s le esta costando procesar, as&amp;iacute; como ver r&amp;aacute;pidamente si una IP nos esta haciendo un ataque de denegaci&amp;oacute;n de servicio, que podr&amp;iacute;a ser una causa de este sintoma. Tambi&amp;eacute;n podemos comparar n&amp;uacute;mero de peticiones de otro d&amp;iacute;a para ver si son coherentes los datos, o llegar a ver exactamente la petici&amp;oacute;n que nos est&amp;aacute;n realizando.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a target="_blank" title="Jet Brains DotTracer" href="http://www.jetbrains.com/profiler/"&gt;JETBRAINS DOTTRACER:&lt;/a&gt;&lt;br /&gt;Esta es una aplicaci&amp;oacute;n muy interesante, de la cual encontramos diferentes versiones, una de ellas demo v&amp;aacute;lida para 30 d&amp;iacute;as, que ayudar&amp;aacute; m&amp;aacute;s que la anterior. Su uso es bastante simple, iniciamos, indicamos que queremos hacer un Profiling de una aplicaci&amp;oacute;n web, y cuando deseemos obtenemos los resultados. Podremos llegar a ver que llamadas a realizado nuestro c&amp;oacute;digo, viendo el tanto por ciento de tiempo que se esta llevando cada proceso. El resultado nos puede ayudar a identificar que hay un bucle que esta quedandose colgado, o que estamos llamado demasiadas veces a un proceso muy costos.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Resolver el problema:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; En mi caso 1)&lt;/b&gt; El problema vino debido a que en un bucle estaba llamando unas 200 veces a algo parecido a esto:&lt;/p&gt;
&lt;p style="padding-left:120px;"&gt;&lt;i&gt;For i as Integer = 0 to 200&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Label1.Text = Me.Label1.Text + &amp;quot;hola&amp;quot;&lt;br /&gt;next&lt;/i&gt;&lt;/p&gt;
&lt;p style="padding-left:90px;"&gt;&lt;b&gt;Esto que parece tan simple, tiene un coste exagerado para .Net (no se muy bien porque, si algui&amp;eacute;n lo tiene claro que me lo explique)&lt;/b&gt;&lt;/p&gt;
&lt;p style="padding-left:90px;"&gt;&lt;b&gt;SOLUCI&amp;Oacute;N:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; StringBuilder Aux = new StringBuilder()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Aux.Append(Me.Label1.Text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For i as Integer = 0 to 200&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Aux.Append(&amp;quot;hola&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next&lt;/i&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; En mi caso 2) &lt;/b&gt;El problema surgio debido a un proceso de caducidad, que hizo que un bucle no tuviese final, algo tan sencillo fueron m&amp;aacute;s de 12 horas buscando el problema.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Espero que esta informaci&amp;oacute;n os sirva de guia ante un caso similar, y sobretodo os aconsejo utilizar el Jet Brains.&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=168422" width="1" height="1"&gt;</description></item><item><title>Trabajando con Sql Server 2008 y XML</title><link>http://geeks.ms/blogs/mpalacios/archive/2010/02/16/trabajando-con-sql-server-2008-y-xml.aspx</link><pubDate>Tue, 16 Feb 2010 23:59:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:167551</guid><dc:creator>Marcos Palacios</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/mpalacios/rsscomments.aspx?PostID=167551</wfw:commentRss><comments>http://geeks.ms/blogs/mpalacios/archive/2010/02/16/trabajando-con-sql-server-2008-y-xml.aspx#comments</comments><description>&lt;p&gt;Desde la aparici&amp;oacute;n de Sql Server 2005 y todas las funcionalidades para trabajar con XML, este se ha convertido en un recurso muy bueno en seg&amp;uacute;n que momentos del desarrollo de una aplicaci&amp;oacute;n. Poder guardar xml, sin tama&amp;ntilde;o fijo, estructurado y sobre el cual poder realizar b&amp;uacute;squedas es un factor muy importante en el momento de decidir si trabajar con este tipo de datos.&lt;/p&gt;
&lt;p&gt;En mi caso, lo utilizamos normalmente para tener una tabla desnormalizada, sobre el cual realizar una &amp;uacute;nica lectura y obtener en una &amp;uacute;nica lectura valores que obtendriamos en N lecturas debido a las relaciones 1 a N.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ejemplo sencillo:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mpalacios/sql-server-xml.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mpalacios/sql-server-xml.jpg" style="float:left;" border="0" width="354" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;La complicaci&amp;oacute;n viene, cuando queremos efectuar diferentes operaciones sobre el xml, aqu&amp;iacute; van un par de ejemplos utiles:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;XML Origen:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;ArrayOfVacancy_Benefits_Denormalized&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:red;" lang="EN-US"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;&amp;quot;&lt;span style="color:blue;"&gt;&lt;a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/a&gt;&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns:xsd&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&lt;a href="http://www.w3.org/2001/XMLSchema" target="_blank"&gt;http://www.w3.org/2001/XMLSchema&lt;/a&gt;&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;Vacancy_Benefits_Denormalized&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;IdVacancyBenefits&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;263716&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IdVacancyBenefits&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;IdVacancy&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;1189680&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IdVacancy&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;IdBenefits&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;16&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IdBenefits&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;IdStatus&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;2&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IdStatus&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;Benefits&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;B&amp;ocirc;nus por
resultado&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Benefits&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;Vacancy_Benefits_Denormalized&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;Vacancy_Benefits_Denormalized&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;IdVacancyBenefits&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;263717&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IdVacancyBenefits&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;IdVacancy&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;1189680&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IdVacancy&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;IdBenefits&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;31&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IdBenefits&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;IdStatus&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;2&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IdStatus&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;Benefits&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;Vale-transporte&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Benefits&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;" lang="EN-US"&gt;Vacancy_Benefits_Denormalized&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;"&gt;ArrayOfVacancy_Benefits_Denormalized&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Consulta con where sobre el campo XML:&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;select&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt; &lt;span style="color:blue;"&gt;Top&lt;/span&gt; 100&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;" lang="EN-US"&gt; *&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt; &lt;span style="color:blue;"&gt;from&lt;/span&gt; &lt;span style="color:teal;"&gt;Vacancy&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt; where&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt; &lt;span style="color:teal;"&gt;Benefits&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;exist&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;/ArrayOfVacancy_Benefits_Denormalized/Vacancy_Benefits_Denormalized[IdBenefits=16]&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)=&lt;/span&gt;1&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt;Como detalle, marcar que hay que igualar el resultado del exist a 1, ya que sino te indica que no es un resultado booleano (algo il&amp;oacute;gico por su parte)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;b&gt;Select con subselect sobre el XML:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;" lang="EN-US"&gt;select&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;" lang="EN-US"&gt; &lt;span style="color:fuchsia;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;Benefits&lt;span style="color:gray;"&gt;.&lt;/span&gt;query&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;for $i in
/ArrayOfVacancy_Benefits_Denormalized/Vacancy_Benefits_Denormalized//Benefits
return string($i)&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;max&lt;/span&gt;&lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt; from&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt; Vacancy&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
En este caso, como podemos tener N Vacancy_Benefits_Denormalized, concateno los Valores de Benefits y los devuelvo como una &amp;uacute;nica columna.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=167551" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mpalacios/archive/tags/sql+server/default.aspx">sql server</category></item><item><title>Hola mundo, Hola geeks!!!</title><link>http://geeks.ms/blogs/mpalacios/archive/2010/02/16/hola-mundo-hola-geeks.aspx</link><pubDate>Tue, 16 Feb 2010 23:48:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:167549</guid><dc:creator>Marcos Palacios</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/mpalacios/rsscomments.aspx?PostID=167549</wfw:commentRss><comments>http://geeks.ms/blogs/mpalacios/archive/2010/02/16/hola-mundo-hola-geeks.aspx#comments</comments><description>&lt;p&gt;Hola a todos, aprovecho este primer post para presentarme y explicaros quien soy y cuales son los temas de los que tratar&amp;aacute; este blog.&lt;/p&gt;
&lt;p&gt;Mi nombre es Marcos Palacios y soy Ingeniero Inform&amp;aacute;tico con casi 10 a&amp;ntilde;os de experiencia en tecnologias .Net, empezando por aquel olvidado ASP al hoy archimoderno Asp.Net con su framework 4.0 con vs2010.&lt;br /&gt;Actualmente estoy trabajando en una de las empresas punteras en el sector de internet por lo que se refiere a Espa&amp;ntilde;a y Latinoamerica, Anuntis. En concreto en el departamento de Latinoam&amp;eacute;rica donde llevo a cabo diferentes tareas, estando al frente de los diferentes sistemas de b&amp;uacute;squedas de los diferentes portales de Latinoam&amp;eacute;rica como son &lt;a target="_blank" title="InfoJobs Brazil" href="http://www.infojobs.com.br"&gt;InfoJobs.com.br&lt;/a&gt;, &lt;a target="_blank" title="Segundamano Mexico" href="http://www.segundamano.com.mx"&gt;Segundamano.com.mx&lt;/a&gt;, &lt;a target="_blank" title="Segundamano Argentina" href="http://www.segundamano.com.ar"&gt;Segundamano.com.ar&lt;/a&gt;, &lt;a target="_blank" title="Balcao" href="http://geeks.ms/controlpanel/blogs/posteditor.aspx/Balcao.com"&gt;Balcao.com &lt;/a&gt;y &lt;a target="_blank" title="Autofoco" href="http://www.autofoco.com"&gt;Autofoco.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;En este blog, tratar&amp;eacute; de informar de todo aquello que s&amp;eacute; y voy aprendiendo, mayormente con referencias a tecnologias microsoft pero siempre dejando un espacio para otros sistemas, ya que siempre hay que estar al corriente de todo lo que va surgiendo y nos puede ayudar a mejorar.&lt;/p&gt;
&lt;p&gt;Este blog, tambi&amp;eacute;n nace como prolongaci&amp;oacute;n de uno ya existente, &lt;a target="_blank" title="Blog del Ingeniero Inform&amp;aacute;tico" href="http://blog.marcospalacios.com"&gt;http://blog.marcospalacios.com&lt;/a&gt;, en el cual he ido publicando durante estos 2 &amp;uacute;ltimos a&amp;ntilde;os, diferentes art&amp;iacute;culos con la misma finalidad.&lt;/p&gt;
&lt;p&gt;Sin m&amp;aacute;s, un saludo a todos.&lt;/p&gt;
&lt;p&gt;Marcos Palacios&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=167549" width="1" height="1"&gt;</description></item></channel></rss>
