-----------------------------------Read Me---------------------------------------------------------- -- This script will generate a single file for all databaases -- Modify outfilepath based on your path -- Filters can be applied based on requirement --How to run in SSMS -- Query --> SQLCMDMODE -- Query --> Results To --> Results To Text -- Query --> Query Options --> Results --> Text --> Max column chars 1000000 (to a number to fit all code) DECLARE @DatabaseName NVARCHAR(128) DECLARE @SQL NVARCHAR(MAX) SET NOCOUNT ON; SET ANSI_WARNINGS OFF; --Out File path :setvar outfilepath "Test.txt" -- Create a cursor to loop through databases DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE NAME NOT IN ('master','tempdb','model','msdb','SQLAudit','DBA','DBAdmin') -- Filter unwanted databases -- Initialize the cursor OPEN db_cursor FETCH NEXT FROM db_cursor INTO @DatabaseName -- Loop through each database WHILE @@FETCH_STATUS = 0 BEGIN -- Create dynamic SQL to switch database context and retrieve source code SET @SQL = N' USE [' + @DatabaseName + N']; select concat( ''IDW_WM ~~'', db_name() collate SQL_Latin1_General_CP1_CI_AS, ''_'', s.name collate SQL_Latin1_General_CP1_CI_AS, ''_'', ao.name collate SQL_Latin1_General_CP1_CI_AS, ''~~'', ao.type_desc collate SQL_Latin1_General_CP1_CI_AS, ''~~'', definition collate SQL_Latin1_General_CP1_CI_AS ) from sys.all_sql_modules asm join sys.all_objects ao on asm.object_id = ao.object_id join sys.schemas s on ao.schema_id = s.schema_id where ao.is_ms_shipped <>1; ' -- set out file path :OUT $(outfilepath) -- Execute the dynamic SQL EXEC sp_executesql @SQL FETCH NEXT FROM db_cursor INTO @DatabaseName END -- Clean up CLOSE db_cursor DEALLOCATE db_cursor