Pregunta

tengo dos series de System.Data.DataRow objetos que quiero comparar.

Las filas tienen dos columnas A y B.La columna A es una clave y quiero saber qué filas han cambiado su columna B y qué filas se han agregado o eliminado.

¿Cómo hago esto en PowerShell?

¿Fue útil?

Solución

Escribí un guión para hacer esto hace un tiempo.El script (Compare-QueryResults.ps1) está disponible aquí y también necesitarás mi script Run-SQLQuery (disponible aquí) o puede reemplazarlo con un script o función propia.

Básicamente, lo que hace el script es tomar los resultados de cada una de sus consultas y dividir las filas de datos para que cada campo sea su propio objeto.Luego usa Compare-Object para verificar si hay diferencias entre los datos en esas filas.Devuelve un objeto de comparación que muestra todas las diferencias entre los datos devueltos.

Los resultados son un objeto, por lo que puede guardarlos en una variable y usar Sort-Object o los cmdlets Format-* con ellos.

Buena suerte.Si tiene algún problema con los guiones, hágamelo saber, estaré encantado de guiarle a través de ellos.Los he estado usando para probar aplicaciones, viendo qué filas se modifican mediante diferentes acciones en un programa.

Otros consejos

Para comparar simplemente dos System.Data.DataRow, puedes hacer algo como esto:

foreach ($property in ($row1 | Get-Member -MemberType Property)) {
    $pName = $property.Name

    if ($row1.$pName -ne $row2.$pName) {
        Write-Host "== $pName =="
        $row1.$pName
        $row2.$pName
    }
}

¿Necesita dos matrices de DataRows?el objeto DataRow tiene una propiedad RowState que le brindará lo que necesita.Consulte los documentos de MSDN: http://msdn.microsoft.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top