Thanks Jonathon. I'll use that for this particular scenario, but is there something perhaps a little more generic that could be used across all modules? I ran into this very same scenario with HR. I put together this script below which seemed to accomplish what was needed. I'm wondering if there's a better way Microsoft would suggest or it's going to be a moving target per module.
/* Script will return a result set that can be copied/pasted to run to delete all objects
from each database for a given product ID. Change the @PRODID to product ID for which
objects need deleted. Once deleted in each database, run the commented out code at
bottom that deletes the rows in DU000010, DU000020, DU000030 and DB_Upgrade tables that
refer to the PRODID. This should be run in a test environment first and backups should be
taken before doing this. */
DECLARE @PRODID CHAR(5)
SET @PRODID = '414' --PRODID of product to remove
SELECT 'DROP TABLE ' + a.name 'DROPSTMT' FROM SYSOBJECTS a
INNER JOIN DYNAMICS.dbo.DU000010 b ON a.name=b.fileOSName
WHERE xtype = 'U' AND PRODID = @PRODID AND b.fileOSName NOT IN
(SELECT fileOSName FROM DYNAMICS.dbo.DU000010 WHERE PRODID <> @PRODID)
UNION
SELECT 'DROP PROC ' + a.name FROM SYSOBJECTS a
LEFT OUTER JOIN DYNAMICS.dbo.DU000010 b ON a.name LIKE 'zDP_'+RTRIM(b.fileOSName)+'%'
WHERE xtype = 'P' AND PRODID = @PRODID AND b.fileOSName NOT IN
(SELECT fileOSName FROM DYNAMICS.dbo.DU000010 WHERE PRODID <> @PRODID)
ORDER BY DROPSTMT
/* DO THIS LAST!
DECLARE @PRODID CHAR(5)
SET @PRODID = '414' --PRODID of product to remove
DELETE DYNAMICS.dbo.DU000030 WHERE PRODID = @PRODID
DELETE DYNAMICS.dbo.DU000010 WHERE PRODID = @PRODID
DELETE DYNAMICS.dbo.DU000020 WHERE PRODID = @PRODID
DELETE DYNAMICS.dbo.DB_UPGRADE WHERE PRODID = @PRODID
*/