I finally figured out how to do this, and actually make it work. The occasion is a 
major module enhancement where we had both text and integer ids in a client table, 
with the text column as the PK referenced from three other tables, but have about a 
dozen other much larger tables with the integer reference value in them. 

We wanted to switch the primary key to the integer number. The text references would 
be left, using a rule to handle the FK equivalent. The module creation script creates 
the new keys based on the integer column and the rules to handle the text columns. 

An outer cursor on the primary keys would allow one to drop all foreign an primary 
keys in a database systematically, relieving a whole pile of typing.

  -- drop a primary key and all its dependent foreign keys automatically
  -- Albert Berry 06/2003
  SET VAR vPKTable TEXT = 'Client'
  SET VAR vPKName TEXT
  SET VAR vPKNum INTEGER
  SET VAR vFKName TEXT
  SET VAR vFKTable TEXT
  SELECT SYS_INDEX_NAME,sys_index_id INTO vPKName, vPKNum +
    FROM SYS_INDEXES +
    WHERE SYS_PRIMARY_KEY = 1 AND SYS_TABLE_ID = +
      (SELECT SYS_TABLE_ID +
         FROM SYS_TABLES +
         WHERE SYS_TABLE_NAME = .vPKTable)
  DECLARE c1 CURSOR FOR +
    SELECT SYS_TABLE_NAME, SYS_INDEX_NAME +
      FROM SYS_INDEXES, SYS_TABLES +
      WHERE SYS_INDEXES.SYS_TABLE_ID = SYS_TABLES.SYS_TABLE_ID +
        AND sys_foreign_key = .vPKNum
  OPEN c1 RESET
  FETCH c1 INTO vFKTable,vFKName
  WHILE SQLCODE <> 100 THEN
    ALTER TABLE &vFKTable DROP CONSTRAINT &vFKName
    FETCH c1 INTO vFKTable,vFKName
  ENDWHILE
  DROP CURSOR c1
  ALTER TABLE .vPKTable DROP CONSTRAINT &vPKName
  RETURN


-- 
Albert Berry
Full Time Consultant to
PSD Solutions
350 West Hubbard, Suite 210
Chicago, IL 60610
312-828-9253 Ext. 32


__________________________________________________________________
McAfee VirusScan Online from the Netscape Network.
Comprehensive protection for your entire computer. Get your free trial today!
http://channels.netscape.com/ns/computing/mcafee/index.jsp?promo=393397

Get AOL Instant Messenger 5.1 free of charge.  Download Now!
http://aim.aol.com/aimnew/Aim/register.adp?promo=380455

Reply via email to