View_Definition в INFORMATION_SCHEMA.VIEWS ограничено 4000 символов

Я создаю резервную копию всех своих представлений, выполняя этот запрос и сохраняя результаты в таблице:

select 
   TABLE_CATALOG as DBName
 , TABLE_NAME as ViewName
 , VIEW_DEFINITION as ViewDef
 , datalength(VIEW_DEFINITION) as [Length]
 , GETDATE() as ImportDate 
from INFORMATION_SCHEMA.VIEWS
order by DBName, ViewName

Но тип данных для столбца VIEW_DEFINITION установлен в nvarchar(4000), и некоторые из моих представлений намного длиннее, поэтому они усекаются.

Столбцы в INFORMATION_SCHEMA.VIEWS

Могу ли я как-то изменить тип данных столбца VIEW_DEFINITION на varchar(max)?

1 ответ

Решение

Поскольку INFORMATION_SCHEMA.VIEWS - это представление, которое вы можете запустить EXEC sp_helptext 'information_schema.views' чтобы узнать определение. Это возвращает

CREATE VIEW INFORMATION_SCHEMA.VIEWS
AS
    SELECT DB_NAME() AS TABLE_CATALOG ,
           SCHEMA_NAME(schema_id) AS TABLE_SCHEMA ,
           name AS TABLE_NAME ,
           CONVERT(NVARCHAR(4000), OBJECT_DEFINITION(object_id)) AS VIEW_DEFINITION ,
           CONVERT(VARCHAR(7) ,
                   CASE with_check_option
                        WHEN 1 THEN 'CASCADE'
                        ELSE 'NONE'
                   END) AS CHECK_OPTION ,
           'NO' AS IS_UPDATABLE
    FROM   sys.views;

Оттуда просто отредактируйте, чтобы получить то, что вам нужно, что

SELECT  
 DB_NAME() AS DBName,  
 name  AS ViewName,  
 OBJECT_DEFINITION(object_id)  AS ViewDef,  
 LEN(OBJECT_DEFINITION(object_id)) AS [Length],
 GETDATE() AS ImportDate
FROM  
 sys.views  
Другие вопросы по тегам