Как я могу извлечь sprocs/tables/functions из определенной схемы?

Мне нужно извлечь все таблицы, сохраненные процессы и функции из базы данных SQL Server 08, которые находятся в определенной схеме. Я мог бы отфильтровать отображаемые элементы в Management Studio, а затем выполнить Script As -> Drop/Create для каждого из них, но мне бы очень хотелось избежать этого, поскольку в схеме довольно много элементов.

Есть ли способ сделать это?

Изменить:

Я просмотрел этот вопрос (возможный дубликат, который я только что нашел). Я бы предпочел не использовать внешний инструмент, как было предложено, поскольку он работает, и мне нужно получить разрешение на его использование. Мне также не нужен один большой Create Database скрипт — мне нужны отдельные скрипты для каждой таблицы/sproc/функции.


person Alex    schedule 27.09.2011    source источник


Ответы (3)


select 
   object_name(obj.object_id), 
   sch.name, 
   co.definition 
from 
   sys.objects obj 
   join sys.schemas sch on sch.schema_id = obj.schema_id
   left join sys.sql_modules co on co.object_id = obj.object_id
where 
   sch.name = 'DBO' --here goes your schema name

--Таблица syscoments использовалась еще в sql 2000, и вам не следует ее больше использовать, но в этом случае это таблица sys.syscomments

person Michal Barcik    schedule 27.09.2011
comment
Это работает, спасибо. Однако возникает странное поведение - оно работает для каждой схемы, кроме той, которую я ищу. Может ли какая-либо конфигурация или что-либо помешать отображению схемы в этом запросе/sys.objects? Я убедился, что объекты определенно находятся в правильной схеме, поэтому она не пуста. - person Alex; 28.09.2011

Visual Studio 2010 Premium включает поддержку инструментов проекта базы данных, которая позволяет выполнять сравнения схем баз данных между базами данных (где вы можете фильтровать только указанную схему базы данных) и извлекать все объекты (и конфигурации) в действующей базе данных в проект базы данных VS2010, создание скрипта для каждого объекта.

См. раздел Работа с проектами базы данных.

person Tom Hunter    schedule 27.09.2011

Что-то на основе

SELECT [text] FROM [syscomments]
person Tom Hunter    schedule 27.09.2011