import java.io.FileInputStream; import java.sql.*; import java.util.Properties; public class TableSurvey { 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("== ALL TABLES + ROW COUNTS =="); try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery( "SELECT t.name AS tbl, SUM(p.rows) AS rowcnt " + "FROM sys.tables t JOIN sys.partitions p ON p.object_id = t.object_id AND p.index_id IN (0,1) " + "GROUP BY t.name ORDER BY t.name")) { while (rs.next()) System.out.printf(" %-24s rows=%s%n", rs.getString("tbl"), rs.getString("rowcnt")); } System.out.println("== TABLES WHOSE b_id IS IDENTITY =="); try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery( "SELECT OBJECT_NAME(ic.object_id) AS tbl FROM sys.identity_columns ic WHERE ic.name='b_id' ORDER BY 1")) { int n = 0; while (rs.next()) { System.out.println(" " + rs.getString("tbl")); n++; } System.out.println(" count=" + n); } System.out.println("== PK / UNIQUE / CHECK CONSTRAINTS REFERENCING TABLES =="); try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery( "SELECT OBJECT_NAME(kc.parent_object_id) AS tbl, kc.name AS cons, kc.type_desc " + "FROM sys.key_constraints kc WHERE kc.parent_object_id IN (SELECT object_id FROM sys.tables) " + "ORDER BY tbl, cons")) { while (rs.next()) System.out.printf(" %-24s %-30s %s%n", rs.getString("tbl"), rs.getString("cons"), rs.getString("type_desc")); } System.out.println("== NON-CLUSTERED INDEXES =="); try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery( "SELECT OBJECT_NAME(i.object_id) AS tbl, i.name AS idx, i.is_unique " + "FROM sys.indexes i WHERE i.object_id IN (SELECT object_id FROM sys.tables) AND i.type = 2 " + "ORDER BY tbl, idx")) { while (rs.next()) System.out.printf(" %-24s %-32s unique=%s%n", rs.getString("tbl"), rs.getString("idx"), rs.getBoolean("is_unique")); } } } }