@fieldID INTEGER,
@p_direction TINYINT  -- 1 -> only forward; 2 -> only backward; 0 -> both directions
AS 
SELECT DISTINCT Variables.VarID , SqlFields.SqlFieldID, statements.Description, OccurrencesStmt.startrow,Paths.PathStr,ProgramTypes.ProgramType
FROM Variables 
INNER JOIN SqlTables INNER JOIN SqlFields ON SqlTables.SqlTableID = SqlFields.SqlTableID 
INNER JOIN StatementReferenceEX ON SqlFields.SqlFieldID = StatementReferenceEX.ReadResourceID ON Variables.VarID = StatementReferenceEX.WrittenResourceID 
INNER JOIN OccurrencesStmt ON StatementReferenceEX.OccurID = OccurrencesStmt.OccurID
INNER JOIN Statements ON OccurrencesStmt.StatementType=statements.StatementType
INNER JOIN Paths ON Paths.PathID=OccurrencesStmt.PathID
LEFT JOIN ProgramTypes ON ProgramTypes.ProgramTypeID=OccurrencesStmt.SourceType 
WHERE (0 = @p_direction OR 1 = @p_direction) 
 AND (StatementReferenceEX.ReadResourceType = 187) 
 AND SqlFields.SqlFieldID = @fieldID
 AND Variables.VarID IN (select ProgramID from #numeric_param_temp)
UNION 
SELECT DISTINCT  Variables.VarID , SqlFields.SqlFieldID, statements.Description, OccurrencesStmt.startrow,Paths.PathStr,ProgramTypes.ProgramType
FROM StatementReferenceEX INNER JOIN SqlFields ON StatementReferenceEX.WrittenResourceID = SqlFields.SqlFieldID 
INNER JOIN Variables ON StatementReferenceEX.ReadResourceID = Variables.VarID 
INNER JOIN OccurrencesStmt ON StatementReferenceEX.OccurID = OccurrencesStmt.OccurID
INNER JOIN Statements ON OccurrencesStmt.StatementType=statements.StatementType
INNER JOIN SqlTables ON SqlFields.SqlTableID = SqlTables.SqlTableID      
INNER JOIN Paths ON Paths.PathID=OccurrencesStmt.PathID  
LEFT JOIN ProgramTypes ON ProgramTypes.ProgramTypeID=OccurrencesStmt.SourceType
WHERE (0 = @p_direction OR 2 = @p_direction) 
 AND (StatementReferenceEX.WrittenResourceType = 187)  
 AND SqlFields.SqlFieldID  = @fieldID
 AND Variables.VarID IN (select ProgramID from #numeric_param_temp)
ORDER BY Variables.VarID , SqlFields.SqlFieldID, OccurrencesStmt.startrow