У меня есть база данных SQL Server с несколькими схемами, каждая из которых содержит несколько представлений.

Мне нужно создать такие же представления в других базах данных, поэтому я хотел бы получить DDL всех представлений в сценарии, сгенерированном с помощью SQL.

В Oracle это было довольно просто: получить доступ к ALL_VIEWS и сослаться на столбец QUERY.

Как можно сделать то же самое в SQL Server?

Благодарность

ИЗМЕНИТЬ

Я знаю, что могу щелкнуть правой кнопкой мыши и получить сценарий объекта в SSMS, мне нужно сделать это для 20/30 представлений, и я не хочу делать это вручную.

Я стараюсь как можно больше избегать ручной работы. Я хочу получить запрос, который генерирует сценарии для всех объектов в одной или нескольких схемах.

Это связано с тем, что схемы быстро развиваются, и создаются новые представления. Мне нужно воспроизвести их в нескольких других базах данных, и я пытаюсь разработать надежную процедуру развертывания

0
Carlo Prato 17 Сен 2021 в 13:38

3 ответа

Лучший ответ

Если вы хотите получить определения представлений из запроса, вы можете использовать sql_modules.

select   m.definition
from     sys.sql_modules   m
join     sys.objects       o  on o.object_id = m.object_id
join     sys.schemas       s  on s.schema_id = o.schema_id
where    o.type = 'V'
and      s.name in ('your', 'schemas', 'here')

Настройте по своему усмотрению, чтобы выбрать нужные представления.

2
allmhuran 17 Сен 2021 в 10:56

Выделив узел Views в обозревателе объектов, откройте Подробности обозревателя объектов ( F8 или Shift + F8 , если я правильно помню).

Это откроет окно со всеми представлениями в списке, и вы выделите нужные представления и щелкните правой кнопкой мыши> сценарий. Здесь вы можете сортировать по имени, фильтровать по схеме (возможно, то, что вы имеете в виду под «владельцем») и т. Д.

Я не уверен, как можно выбрать 20 или 30 представлений в любом сценарии, не допуская возможности человеческой ошибки.

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

SET NOCOUNT ON;

SELECT 'GO' + OBJECT_DEFINITION(object_id)
  FROM sys.views
  WHERE schema_id = SCHEMA_ID(N'schema_name');

Проблема в том, что в Management Studio есть жесткие ограничения на вывод текста даже после настройки Tools> Options> Query Results> SQL Server> Results to Text и установки максимального значения (8,192). Поэтому, если длина любого из ваших представлений превышает 8192 символа, вам потребуется как-нибудь обойти эту проблему.

Но на самом деле Ларну прав. Ваши представления должны находиться в системе контроля версий, и это должно быть вашим источником для развертывания, а не извлечением вручную из базы данных.

5
Aaron Bertrand 17 Сен 2021 в 11:02

Получить представления, схемы и определения можно довольно стандартным способом:

select * from information_schema.views
1
Arvo 17 Сен 2021 в 10:58