• Now it works! Definition code in information_schema.routines ist varchar(4000), the definition code might be incomplete. So I needed to use another source.

    If you change @var to 'V', you can backup all your views, with 'TF' you might backup functions, too.

    DECLARE @db nvarchar(20)

    DECLARE @strSQL nvarchar (max)

    DECLARE @table nvarchar(50) = 'Monitor.dbo.Code_Procedures'

    DECLARE @var varchar(3) = 'P'

    DECLARE @strDEL nvarchar(max)

    DECLARE @STR nvarchar (max) = 'IF CURSOR_STATUS(''global'',''cur2'')>=-1 BEGIN DEALLOCATE cur2 END

    --IF OBJECT_ID('''+ @table + ''') IS NOT NULL DROP TABLE '+ @table +'

    IF OBJECT_ID('''+ @table + ''') IS NULL CREATE TABLE '+ @table + '(

    [DB_NAME] nvarchar(128),

    [SCHEMA_NAME] nvarchar(128),

    ROUTINE_NAME varchar(max),

    ROUTINE_DEFINITION varchar(max),

    CREATE_DATE datetime,

    LAST_ALTERED datetime,

    INSERT_DATE date)

    DECLARE

    @db_name nvarchar(128),

    @schema_name nvarchar(128),

    @routine_name varchar(max),

    @routine_definition varchar(max),

    @create_date datetime,

    @last_altered datetime

    DECLARE cur2 CURSOR FOR

    SELECT

    DB_NAME(),

    s.name,

    o.name,

    m.definition,

    o.create_date,

    o.modify_date

    FROM sys.objects o

    INNER JOIN sys.sql_modules m

    ON o.object_id = m.object_id

    INNER JOIN sys.schemas s

    ON s.schema_id = o.schema_id

    WHERE o.type = '''+ @var +'''

    OPEN cur2

    FETCH NEXT FROM cur2 INTO

    @db_name,

    @schema_name,

    @routine_name,

    @routine_definition,

    @create_date,

    @last_altered

    WHILE @@FETCH_STATUS = 0

    BEGIN

    INSERT INTO '+ @table + ' (

    [DB_NAME],

    [SCHEMA_NAME],

    ROUTINE_NAME,

    ROUTINE_DEFINITION,

    CREATE_DATE,

    LAST_ALTERED,

    INSERT_DATE)

    VALUES (

    @db_name,

    @schema_name,

    @routine_name,

    @routine_definition,

    @create_date,

    @last_altered,

    CONVERT (date, GETDATE()))

    FETCH NEXT FROM cur2 INTO

    @db_name,

    @schema_name,

    @routine_name,

    @routine_definition,

    @create_date,

    @last_altered

    END

    CLOSE cur2

    DEALLOCATE cur2'

    IF CURSOR_STATUS('global','cur1')>=-1 BEGIN DEALLOCATE cur1 END

    DECLARE cur1 CURSOR FOR

    SELECT name FROM sys.databases

    WHERE name not in ('Reporter1','Reporter1TempDB','ReportServer','ReportServerTempDB','sysutility_mdw','tempdb','master','model','msdb')

    OPEN cur1

    FETCH NEXT FROM cur1 INTO @db

    WHILE @@FETCH_STATUS = 0

    BEGIN

    SET @strSQL = 'USE ' + @db +'; ' + @STR

    EXEC sp_executesql @strSQL

    FETCH NEXT FROM cur1 INTO @db

    END

    CLOSE cur1

    DEALLOCATE cur1

    /*

    SET @strDEL = 'DELETE FROM ' + @table + ' WHERE [INSERT_DATE] < CONVERT (date, GETDATE()-30)'

    EXEC sp_executesql @strDEL

    */