Отображение содержимого просмотра в SQL Server2008 - PullRequest
3 голосов
/ 12 марта 2010

Как я могу отобразить содержимое всех просмотров в БД в SQL Server 2008? Есть ли какие-либо новые системные представления, чтобы сделать то же самое?

Ответы [ 3 ]

5 голосов
/ 12 марта 2010
SELECT
    O.name, SM.definition
FROM
    sys.objects O
    JOIN
    sys.sql_modules SM ON o.object_id = SM.object_id
WHERE
    o.type = 'V'

«INFORMATION_SCHEMA» имеет ограничение по столбцу nvarchar (4000), что приведет к усечению определения представления при его выборе: не используйте его

5 голосов
/ 12 марта 2010

Самый простой способ использования Management Studio:

  1. Найти базу данных в Management Studio
  2. В базе данных нажмите на папку Views слева (официально называемую Object Explorer), которая должна показать вам список представлений справа от вас. Если этого не произойдет, вы хотите перейти в меню «Вид» и выбрать «Сведения об объекте».
  3. Выберите все ваши представления.
  4. Щелкните правой кнопкой мыши по выбранным представлениям и выберите «Представление сценария как» -> Создать в -> Новое окно запроса

Откроется окно с определением вида всего, что вы выбрали.

РЕДАКТИРОВАТЬ: Если вы хотите запросить все определения вашего представления, вы можете сделать что-то вроде:

Select VIEW_DEFINITION
From INFORMATION_SCHEMA.VIEWS

Если вы измените вывод на «Текст» вместо «Сетка», появится список всех ваших представлений.

Как указал gbn, если вам нужна эта схема и если какой-то разработчик достаточно сумасшедший, чтобы создать представление длиной более 4 тыс. Символов, представления INFORMATION_SCHEMA будут возвращать нуль для схемы этого представления. Таким образом, в этом случае использование системных таблиц будет более целесообразным. Вариант решения gbn, похожий на то, что SMS делает за кулисами, будет:

Select smv.definition
FROM sys.all_views AS v
    JOIN sys.sql_modules AS smv 
        ON smv.object_id = v.object_id
0 голосов
/ 15 августа 2013

Добавление этого сценария sqlcmd для других пользователей, поскольку ограничение в 4 КБ было неинтересным. Благодаря этой теме.

-- :r meta_show_view_definition.sql
-- need user logon with ALTER permissions
-- :setvar ObjectName "<string>"
set nocount on

declare @sql varchar(max)
:out $(ObjectName).view.dump.sql

set @sql = '
select obj.name, sm.definition
from   sys.objects obj
join   sys.sql_modules sm  on  obj.object_id = sm.object_id
where
    obj.type = "V" and
    upper(obj.name) = upper("' + '$(ObjectName)' + '")' 

exec (@sql)
go

:out stdout
set nocount off
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...