diff --git a/sqlalchemy_sqlany/base.py b/sqlalchemy_sqlany/base.py index 70b21e7..a77f066 100644 --- a/sqlalchemy_sqlany/base.py +++ b/sqlalchemy_sqlany/base.py @@ -600,7 +600,7 @@ def get_foreign_keys(self, connection, table_name, schema=None, **kw): column_cache[table_id] = columns REFCONSTRAINT_SQL = text(""" - SELECT fk.foreign_index_id, i.index_name AS name, pt.table_id AS reftable_id + SELECT fk.foreign_index_id, i.index_name AS name, i.index_id, pt.table_id AS reftable_id FROM sys.sysfkey fk join sys.systab pt on fk.primary_table_id = pt.table_id join sys.sysidx i on i.table_id=fk.primary_table_id @@ -618,6 +618,7 @@ def get_foreign_keys(self, connection, table_name, schema=None, **kw): for r in referential_constraints: reftable_id = r["reftable_id"] + index_id = r["index_id"] foreign_index_id = r["foreign_index_id"] if reftable_id not in table_cache: @@ -648,11 +649,13 @@ def get_foreign_keys(self, connection, table_name, schema=None, **kw): join sys.sysidxcol ic on (fk.foreign_index_id=ic.index_id and fk.foreign_table_id=ic.table_id) join sys.sysidxcol pic on (fk.primary_index_id=pic.index_id and fk.primary_table_id=pic.table_id) WHERE fk.primary_table_id = :reftable_id + and fk.primary_index_id = :index_id and fk.foreign_table_id = :table_id and fk.foreign_index_id = :foreign_index_id """) ref_cols = connection.execute(REFCOLS_SQL, table_id=table_id, + index_id=index_id, reftable_id=reftable_id, foreign_index_id=foreign_index_id) for rc in ref_cols: