#!/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"