Si alguna vez has usado SQL Server Upgrade Advisor para analizar el estado actual de un servidor de SQL Server de cara a una migración, habrás podido notar que la herramienta en sí, aunque funciona como debe, peca en algunos aspectos…con solo tener que analizar más de 1 instancia ya te das cuenta de lo que te digo :)Bueno, pues si a alguien (como es mi caso) no le apetece tener que lidiar con los ficheros DE.xml de resultado exportados a .csv que genera la herramienta por defecto…que sepa que se puede muy facilmente hacer uno un “parser” de dicho XML para hacer con la información lo que mejor se quiera.Para esto lo único que tenemos que hacer es generarnos el .xsd de resultado (Visual Studio lo hace automático por nosotros), leer el XML a un DataSet y luego lanzar esta “sencilla” query LINQ2DataSet 🙂
1: var q = from ia in ds.Tables["ItemAttribute"].AsEnumerable()
2: join ias in ds.Tables["ItemAttributes"].AsEnumerable()
3: on ia.Field<int>("ItemAttributes_id")
4: equals ias.Field<int>("ItemAttributes_id")
5: join item in ds.Tables["Item"].AsEnumerable()
6: on ias.Field<int>("Item_id")
7: equals item.Field<int>("Item_id")
8: join r in ds.Tables["Report"].AsEnumerable()
9: on item.Field<Nullable<byte>>("ItemId")
10: equals r.Field<Nullable<byte>>("ItemId")
11: join iss in ds.Tables["Issue"].AsEnumerable()
12: on r.Field<Nullable<byte>>("IssueId")
13: equals iss.Field<Nullable<byte>>("IssueId")
14: select new
15: {
16: ItemAttributesId = ia.Field<int>("ItemAttributes_id"),
17: Name = ia.Field<string>("Name"),
18: Value = ia.Field<string>("Value"),
19: Issue = iss.Field<string>("IssueDescription"),
20: IssueText = iss.Field<string>("IssueText"),
21: IssueType = iss.Field<string>("IssueType")
22: };
Ahora solo te queda usar el objeto “q” para añadirle o toquetearle lo que quieras…una pista?…¿Qué tal que tu parser sea capaz de darte estimaciones temporales basado en el tipo de “Issue”? 🙂
Salu2!