Files
dtic-DIIAA/adn/tools/cli/verificar_pk_dasu.rb
T

89 lines
3.1 KiB
Ruby

#!/usr/bin/env ruby
# frozen_string_literal: true
require_relative 'drones/lib/dasu_executor'
puts "=== DASU-SQL4 - Verificar clave primaria en BonosAfiliado ==="
puts ""
ps_script = <<~PSCMD.strip
$ErrorActionPreference = "Stop"
$connString = "Server=localhost;Database=sysdasuten;Integrated Security=true;TrustServerCertificate=yes;"
$conn = New-Object System.Data.SqlClient.SqlConnection($connString)
$conn.Open()
Write-Host "[1] ¿Hay clave primaria en BonosAfiliado?"
$cmd = New-Object System.Data.SqlClient.SqlCommand("
SELECT i.name as index_name, i.is_primary_key, i.is_unique
FROM sys.indexes i
WHERE i.object_id = OBJECT_ID('dbo.BonosAfiliado') AND i.is_primary_key = 1
", $conn)
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
$ds = New-Object System.Data.DataSet
$adapter.Fill($ds)
if ($ds.Tables[0].Rows.Count -gt 0) {
$row = $ds.Tables[0].Rows[0]
Write-Host " PK: $($row.index_name) (unique: $($row.is_unique))"
} else {
Write-Host " NO HAY CLAVE PRIMARIA"
}
Write-Host "`n[2] ¿Hay índices únicos?"
$cmd = New-Object System.Data.SqlClient.SqlCommand("
SELECT i.name as index_name, i.is_unique
FROM sys.indexes i
WHERE i.object_id = OBJECT_ID('dbo.BonosAfiliado') AND i.is_unique = 1
", $conn)
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
$ds = New-Object System.Data.DataSet
$adapter.Fill($ds)
if ($ds.Tables[0].Rows.Count -gt 0) {
$ds.Tables[0].Rows | ForEach-Object {
Write-Host " Índice: $($_.index_name) (unique: $($_.is_unique))"
}
} else {
Write-Host " NO HAY ÍNDICES ÚNICOS"
}
Write-Host "`n[3] Columnas de la tabla:"
$cmd = New-Object System.Data.SqlClient.SqlCommand("
SELECT c.name, t.name as type_name, c.is_nullable
FROM sys.columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID('dbo.BonosAfiliado')
ORDER BY c.column_id
", $conn)
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
$ds = New-Object System.Data.DataSet
$adapter.Fill($ds)
$ds.Tables[0].Rows | ForEach-Object {
Write-Host " $($_.name) ($($_.type_name)) nullable=$($_.is_nullable)"
}
Write-Host "`n[4] ¿Hay registros duplicados por (fecha, codigoafiliado, dependencia)?"
$cmd = New-Object System.Data.SqlClient.SqlCommand("
SELECT fecha, codigoafiliado, dependencia, COUNT(*) as duplicados
FROM BonosAfiliado
GROUP BY fecha, codigoafiliado, dependencia
HAVING COUNT(*) > 1
ORDER BY duplicados DESC
", $conn)
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
$ds = New-Object System.Data.DataSet
$adapter.Fill($ds)
if ($ds.Tables[0].Rows.Count -gt 0) {
Write-Host " Hay $($ds.Tables[0].Rows.Count) combinaciones duplicadas"
$ds.Tables[0].Rows | Select-Object -First 5 | ForEach-Object {
Write-Host " fecha=$($_.fecha) | afiliado=$($_.codigoafiliado) | dep=$($_.dependencia) | count=$($_.duplicados)"
}
} else {
Write-Host " NO HAY DUPLICADOS"
}
$conn.Close()
PSCMD
DasuExecutor.execute_ps_on_dasu(ps_script)
puts "\n✅ Verificación completada"