%
Response.Write("
Cleanup Duplicate Printer Machines
")
' First, show what will be deleted
Response.Write("Records that will be DELETED:
")
Dim strSQL, rs
strSQL = "SELECT m1.machineid, m1.machinenumber, m1.alias, c.address as ipaddress " &_
"FROM machines m1 " &_
"LEFT JOIN communications c ON m1.machineid = c.machineid AND c.comstypeid = 1 " &_
"WHERE m1.machinetypeid = 15 " &_
"AND m1.machineid NOT IN ( " &_
" SELECT MIN(m2.machineid) " &_
" FROM machines m2 " &_
" WHERE m2.machinetypeid = 15 " &_
" GROUP BY m2.machinenumber " &_
") " &_
"ORDER BY m1.machinenumber, m1.machineid"
set rs = objConn.Execute(strSQL)
Response.Write("")
Response.Write("| Machine ID | Machine Number | Alias | IP |
")
Dim deleteCount
deleteCount = 0
While Not rs.EOF
deleteCount = deleteCount + 1
Response.Write("")
Response.Write("| " & rs("machineid") & " | ")
Response.Write("" & Server.HTMLEncode(rs("machinenumber") & "") & " | ")
Response.Write("" & Server.HTMLEncode(rs("alias") & "") & " | ")
Response.Write("" & Server.HTMLEncode(rs("ipaddress") & "") & " | ")
Response.Write("
")
rs.MoveNext
Wend
Response.Write("
")
rs.Close
Response.Write("Total records to delete: " & deleteCount & "
")
' Now execute the DELETE
Response.Write("Executing DELETE...
")
On Error Resume Next
strSQL = "DELETE m1 " &_
"FROM machines m1 " &_
"WHERE m1.machinetypeid = 15 " &_
"AND m1.machineid NOT IN ( " &_
" SELECT * FROM ( " &_
" SELECT MIN(m2.machineid) " &_
" FROM machines m2 " &_
" WHERE m2.machinetypeid = 15 " &_
" GROUP BY m2.machinenumber " &_
" ) AS keep_ids " &_
")"
objConn.Execute(strSQL)
If Err.Number <> 0 Then
Response.Write("ERROR:
")
Response.Write("Error Number: " & Err.Number & "
")
Response.Write("Error Description: " & Server.HTMLEncode(Err.Description) & "
")
Err.Clear
Else
Response.Write("DELETE completed successfully!
")
End If
On Error Goto 0
' Verify no duplicates remain
Response.Write("Verification - Remaining Duplicates:
")
strSQL = "SELECT machinenumber, COUNT(*) as cnt " &_
"FROM machines " &_
"WHERE machinetypeid = 15 " &_
"GROUP BY machinenumber " &_
"HAVING COUNT(*) > 1"
set rs = objConn.Execute(strSQL)
If rs.EOF Then
Response.Write("No duplicates remaining! ✓
")
Else
Response.Write("WARNING: Duplicates still exist!
")
Response.Write("")
Response.Write("| Machine Number | Count |
")
While Not rs.EOF
Response.Write("")
Response.Write("| " & Server.HTMLEncode(rs("machinenumber") & "") & " | ")
Response.Write("" & rs("cnt") & " | ")
Response.Write("
")
rs.MoveNext
Wend
Response.Write("
")
End If
rs.Close
' Show final count
strSQL = "SELECT COUNT(*) as cnt FROM machines WHERE machinetypeid = 15"
set rs = objConn.Execute(strSQL)
Response.Write("Final printer machine count: " & rs("cnt") & "
")
rs.Close
objConn.Close
%>