Files
workspace/code/fms/.tmp-fkcheck/FkSummary.java
T
2026-08-21 23:06:56 +08:00

45 lines
2.5 KiB
Java

import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;
public class FkSummary {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
try (FileInputStream in = new FileInputStream(args[0])) { props.load(in); }
try (Connection conn = DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"), props.getProperty("password"))) {
System.out.println("== FK count by parent table ==");
try (Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(
"SELECT OBJECT_NAME(parent_object_id) AS tbl, COUNT(*) AS fk_cnt " +
"FROM sys.foreign_keys GROUP BY parent_object_id ORDER BY tbl")) {
while (rs.next()) System.out.printf("%-22s %d%n", rs.getString("tbl"), rs.getInt("fk_cnt"));
}
System.out.println("== tables WITH FKs: " + "see above" + " ==");
try (Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT COUNT(DISTINCT parent_object_id) FROM sys.foreign_keys")) {
rs.next(); System.out.println("tables_with_fk=" + rs.getInt(1));
}
try (Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT COUNT(*) FROM sys.tables")) {
rs.next(); System.out.println("total_tables=" + rs.getInt(1));
}
// self-referencing FKs
try (Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(
"SELECT name FROM sys.foreign_keys WHERE parent_object_id = referenced_object_id")) {
System.out.println("== self-referencing FKs ==");
while (rs.next()) System.out.println(" " + rs.getString("name"));
}
// composite FKs (more than one column)
try (Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(
"SELECT fk.name, COUNT(*) AS cols FROM sys.foreign_keys fk " +
"JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id " +
"GROUP BY fk.name HAVING COUNT(*) > 1")) {
System.out.println("== composite FKs (multi-column) ==");
while (rs.next()) System.out.printf(" %s (%d cols)%n", rs.getString("name"), rs.getInt("cols"));
}
}
}
}