20260821230656
This commit is contained in:
1 parent
2e5d532f23
commit
c43b4c8364
144 files changed
+7665
-242
No files matched your search
@@ -0,0 +1,44 @@
|
||||
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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user