Is there a way to search all database objects by a particular database name or its id. Is that possible? I would like to do this so that I can find out how many stored procedures, functions, views, etc on each DB. By googling, I found some posts about searching objects by user but not database.
Update:
To make my question little bit more clear, I already have this code to get total count of each object type for a specific DB.
SELECT
SUM(CASE WHEN CHARINDEX('FUNCTION', o.type_desc) > 0 THEN 1 ELSE 0 END) [functions],
SUM(CASE WHEN CHARINDEX('STORED_PROCEDURE', o.type_desc) > 0 THEN 1 ELSE 0 END) [procs],
SUM(CASE WHEN CHARINDEX('TRIGGER', o.type_desc) > 0 THEN 1 ELSE 0 END) [triggers],
SUM(CASE WHEN CHARINDEX('VIEW', o.type_desc) > 0 THEN 1 ELSE 0 END) [views]
FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id = o.object_id
But I was wondering if I can iterate through sys.databases and return result like below:
Best Answer
Simple dynamic SQL should do the trick for this.
On my system, I get this:
If you want to get funky, you might wrap the above dynamic SQL inside a
PIVOT
, like this:Then you get a single row for each database, with the count of each type of object in a column for each type: