TEXT TO m.lcSQL TEXTMERGE NOSHOW SELECT ; <<FExcept("MyTable","thisfield, thatfield")>>, ; <<FExcept("MyTable2","anotherfield")>> ; FROM MyTable ; INNER JOIN MyTable2 ON somefield = someotherfield ; INTO CURSOR c_Testing ENDTEXT &lcSQL.Here's the routine. I tested it for the simplest/obvious stuff.
*FExcept.PRG LPARAMETERS m.tcSourceAlias, m.tcExcludeFieldList IF PCOUNT()<2 ERROR 1229 && too few args ENDIF IF VARTYPE(m.tcSourceAlias) # "C" ; OR VARTYPE(m.tcExcludeFieldList) # "C" ; OR EMPTY(m.tcExcludeFieldList) ERROR 11 ENDIF IF NOT USED(m.tcSourceAlias) ERROR 13 ENDIF LOCAL ; m.lcExtraCommasFieldList, ; m.lcReturnedFieldList, ; m.lnFieldCount, ; m.lnCounter STORE "," + UPPER(m.tcExcludeFieldList) ; + "," TO m.lcExtraCommasFieldList STORE "" TO ; m.lcReturnedFieldList LOCAL ARRAY ; m.laFields[1] m.lnFieldCount = AFIELDS(m.laFields,m.tcSourceAlias) FOR m.lnCounter = 1 TO m.lnFieldCount IF "," + laFields[m.lnCounter,1] ; + "," $ m.lcExtraCommasFieldList LOOP ENDIF m.lcReturnedFieldList = ; m.lcReturnedFieldList ; + laFields[m.lnCounter,1] + "," ENDFOR m.lnI m.lcReturnedFieldList = ; LEFT(m.lcReturnedFieldList,; LEN(m.lcReturnedFieldList) - 1) RETURN m.lcReturnedFieldList