** create_fk_list.prg ** Uses SS sp_fkeys to generate sql code for re-creating FK's LOCAL lnDSN, lcDSN, lcDSNUser, lcDSNPass, lcSQL, lnSuccess, lcString lcDSN = 'mydsn' lcDSNUser = 'user' lcDSNPass = 'password' lnDSN = sqlcon(lcDSN, lcDSNUser, lcDSNPass) IF lnDSN < 0 ?'ERROR - sqlconnect()failed' return ENDIF IF USED('cTableList') USE IN cTableList ENDIF lnSuccess = sqltables(lnDSN, 'TABLE','cTableList') IF lnSuccess < 0 ?'ERROR - sqltables()failed' return ENDIF CREATE CURSOR cSQLCommands ( fktable_name C(64), sqlcommand C(254) ) SELECT cTableList SCAN lcSQL = 'exec sp_fkeys ' + ALLTRIM(cTableList.table_name) IF USED('cFKList') USE IN cFKList ENDIF IF sqlexec(lnDSN, lcSQL, 'cFKList') > 0 SELECT cFKList SCAN lcSQLCommand = 'alter table ' + ALLTRIM(cFKList.fktable_name) + ; ' add constraint ' + ALLTRIM(cFKList.fk_name) + ; ' foreign key (' + ALLTRIM(cFKList.fkcolumn_name) + ') references ' + ; ALLTRIM(cFKList.pktable_name) + ' (' + ALLTRIM(cFKList.pkcolumn_name) + ')' INSERT INTO cSQLCommands (fktable_name, sqlcommand) VALUES(cFKList.fktable_name, lcSQLCommand) ENDSCAN ENDIF ENDSCAN ?sqldisco(0) SELECT cSQLCommands INDEX ON fktable_name TAG fktl SET ORDER TO fktl lcString = '' SCAN lcString = lcString + CHR(13)+CHR(10) + ALLTRIM(sqlcommand) ENDSCAN STORE lcString TO _cliptext ?lcString * CLOSE DATA ALL
>select so.name as table_name, > sofkc.name as fk_constraint, > sr.constid, sofkc.id, > so2.name as referencing_table_name, > so3.name as refered_table_name >from sysobjects so, sysobjects sofkc, sysreferences sr, > sysobjects so2, sysobjects so3 >where so.name = 'shopper' >and so.type = 'U' >and sofkc.type = 'F' >and sr.constid = sofkc.id >and sr.fkeyid = so2.id >and sr.rkeyid = so3.id >order by table_name, fk_constraint >>