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
*/