20260821230656
This commit is contained in:
1 parent
2e5d532f23
commit
c43b4c8364
144 files changed
+7665
-242
No files matched your search
@@ -0,0 +1,85 @@
|
||||
import java.io.FileInputStream;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.Statement;
|
||||
import java.util.Properties;
|
||||
|
||||
public class FkCheck {
|
||||
public static void main(String[] args) throws Exception {
|
||||
Properties props = new Properties();
|
||||
try (FileInputStream in = new FileInputStream(args[0])) {
|
||||
props.load(in);
|
||||
}
|
||||
String url = props.getProperty("url");
|
||||
String user = props.getProperty("username");
|
||||
String pass = props.getProperty("password");
|
||||
|
||||
System.out.println("Connecting to: " + url);
|
||||
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
|
||||
try (Connection conn = DriverManager.getConnection(url, user, pass)) {
|
||||
System.out.println("CONNECTED: " + conn.getMetaData().getDatabaseProductName()
|
||||
+ " " + conn.getMetaData().getDatabaseProductVersion());
|
||||
|
||||
// 1. Total FK count
|
||||
try (Statement st = conn.createStatement();
|
||||
ResultSet rs = st.executeQuery("SELECT COUNT(*) FROM sys.foreign_keys")) {
|
||||
rs.next();
|
||||
System.out.println("TOTAL_FK_COUNT=" + rs.getInt(1));
|
||||
}
|
||||
|
||||
// 2. FK status summary (disabled / not trusted / not for replication)
|
||||
System.out.println("--- FK STATUS ---");
|
||||
try (Statement st = conn.createStatement();
|
||||
ResultSet rs = st.executeQuery(
|
||||
"SELECT name, is_disabled, is_not_trusted, is_not_for_replication, create_date " +
|
||||
"FROM sys.foreign_keys ORDER BY name")) {
|
||||
while (rs.next()) {
|
||||
System.out.printf("FK=%s disabled=%s not_trusted=%s not_for_repl=%s created=%s%n",
|
||||
rs.getString("name"), rs.getBoolean("is_disabled"),
|
||||
rs.getBoolean("is_not_trusted"), rs.getBoolean("is_not_for_replication"),
|
||||
rs.getTimestamp("create_date"));
|
||||
}
|
||||
}
|
||||
|
||||
// 3. FK delete/update actions
|
||||
System.out.println("--- FK ACTIONS ---");
|
||||
String actSql =
|
||||
"SELECT fk.name, OBJECT_NAME(fk.parent_object_id) AS parent_table, " +
|
||||
" fk.delete_referential_action_desc AS del_action, " +
|
||||
" fk.update_referential_action_desc AS upd_action " +
|
||||
"FROM sys.foreign_keys fk ORDER BY parent_table, fk.name";
|
||||
try (Statement st = conn.createStatement();
|
||||
ResultSet rs = st.executeQuery(actSql)) {
|
||||
while (rs.next()) {
|
||||
System.out.printf("%s (%s): ON DELETE %s, ON UPDATE %s%n",
|
||||
rs.getString("name"), rs.getString("parent_table"),
|
||||
rs.getString("del_action"), rs.getString("upd_action"));
|
||||
}
|
||||
}
|
||||
|
||||
// 4. FK details: parent/child columns
|
||||
System.out.println("--- FK DETAILS ---");
|
||||
String sql =
|
||||
"SELECT fk.name AS fk_name, " +
|
||||
" OBJECT_NAME(fk.parent_object_id) AS parent_table, " +
|
||||
" OBJECT_NAME(fk.referenced_object_id) AS ref_table, " +
|
||||
" pc.name AS parent_col, rc.name AS ref_col, fkc.constraint_column_id AS ord " +
|
||||
"FROM sys.foreign_keys fk " +
|
||||
"JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id " +
|
||||
"JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fkc.parent_column_id " +
|
||||
"JOIN sys.columns rc ON rc.object_id = fk.referenced_object_id AND rc.column_id = fkc.referenced_column_id " +
|
||||
"ORDER BY parent_table, fk.name, ord";
|
||||
try (Statement st = conn.createStatement();
|
||||
ResultSet rs = st.executeQuery(sql)) {
|
||||
while (rs.next()) {
|
||||
System.out.printf("%s: %s(%s) -> %s(%s)%n",
|
||||
rs.getString("fk_name"), rs.getString("parent_table"),
|
||||
rs.getString("parent_col"), rs.getString("ref_table"),
|
||||
rs.getString("ref_col"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user