This works for me under MSSQL:
WITH AllFolderPaths (Idnr, FolderPath) AS (
-- Anchor: Find all valid Clients on the UC4 system
SELECT
OH_IDnr,
CAST(OH_Name AS NVARCHAR(MAX)) AS FolderPath -- Explicit conversion to NVARCHAR(MAX)
FROM OH
WHERE OH_OTYPE = 'CLNT'
AND OH_Name = '1000'
UNION ALL
-- Recursive: Find all FOLDers on all clients
SELECT
OFS.OFS_OH_IDnr_O,
CAST(FolderPath + '\' + SUBSTRING(OH_Name, CHARINDEX('\', OH_Name), 200) AS NVARCHAR(MAX)) -- Ensure the same type
FROM AllFolderPaths
INNER JOIN OFS ON AllFolderPaths.Idnr = OFS.OFS_OH_Idnr_F
INNER JOIN OH ON OFS.OFS_OH_Idnr_O = OH_IDnr
WHERE OH_OTYPE = 'FOLD'
)
SELECT
-- OH.OH_IDnr, -- Object Identifier
FolderPath,
oh.OH_otype,
SUBSTRING(OH_Name, CHARINDEX('\', OH_Name) + 1, 200) AS ObjectName
FROM AllFolderPaths
INNER JOIN OFS ON AllFolderPaths.Idnr = OFS.OFS_OH_Idnr_F
INNER JOIN OH ON OFS.OFS_OH_Idnr_O = OH_IDnr
WHERE FolderPath LIKE '1000\\%'
AND OH_OType != 'FOLD'
ORDER BY FolderPath, ObjectName;
------------------------------
--------------------------------------------------------
Automic Consultant and Trainer since 2000
--------------------------------------------------------
now Tricise
------------------------------
Original Message:
Sent: Oct 29, 2024 12:12 PM
From: Matthew Bailey
Subject: SQL query to list all objects (and folders) under a given folder
Incorporating Philipp Elmer's query, this returns a recursive list of all objects under given folder (&W_FOLDER#) in current client:
with AllFolderPaths (Idnr, FolderPath) AS (
--find all valid Clients on the UC4 system
select OH_IDnr
-- T-SQL:
-- , CAST(OH_Name as VARCHAR(MAX))
-- Oracle:
, OH_Name
from OH
where OH_OTYPE = 'CLNT'
and OH_Name = '&$CLIENT#'
UNION ALL
--find all FOLDers on all clients
select OFS_OH_IDNR_O
-- T-SQL:
-- , FolderPath + SUBSTRING(OH_Name, CHARINDEX('\', OH_Name), 200)
-- Oracle:
, FolderPath || SUBSTR(OH_Name, INSTR(OH_Name, '\'))
from AllFolderPaths
inner join OFS on Idnr = OFS_OH_Idnr_F
inner join OH on OFS_OH_Idnr_O = OH_IDNR
where OH_OTYPE = 'FOLD'
)
select -- Idnr, -- Folder Identifier
OH_IDnr -- Object Identifier
, FolderPath
, SUBSTRING(OH_Name, CHARINDEX('\', OH_Name) + 1, 200) ObjectName
from AllFolderPaths
, OFS
, OH
where FolderPath like '&$CLIENT#\&W_FOLDER#%'
and idnr = OFS_OH_Idnr_F
and OH_Idnr = OFS_OH_Idnr_O
and OH_OType != 'FOLD'
order by FolderPath, ObjectName
Original Message:
Sent: Jul 24, 2019 04:39 AM
From: Michael A. Lowry
Subject: SQL query to list all objects (and folders) under a given folder
AllFolderPaths
is a common table expression earlier in the same SQL statement. See this comment.