На самом деле, это должно быть не проблема. Начиная с Visual Studio 2012, есть возможность установить схему для объектов-оболочек T-SQL. В свойствах проекта перейдите на вкладку «Настройки проекта», а справа в разделе «Общие» есть текстовое поле с надписью: «Схема по умолчанию». Это схема, используемая для объектов-оболочек T-SQL (я обычно не использую развертывание SSDT, поэтому я просто подтвердил эту информацию в Visual Studio 2015 - я знаю, я знаю, мне действительно необходимо обновить).
Это также упоминалось в моем ответе: Схема для хранимой процедуры CLR во время развертывания
Если используемая версия Visual Studio / SSDT не имеетвозможность установить схему ИЛИ , если вам нужно поместить объекты в несколько схем, тогда вы сможете просто добавить сценарий пост-развертывания T-SQL, который перемещает объектына желаемую схему. При добавлении сценария T-SQL и установке свойств «после развертывания» (или чего-то подобного) он будет вставлен в конец сгенерированного сценария публикации.
Если это только небольшое количестводля объектов, в которые не будут введены новые объекты, вы можете сделать явные операторы для каждого объекта:
ALTER SCHEMA [foo] TRANSFER [dbo].[MyProc];
Если это большое количество объектов и / или новые объекты будут добавляться время от времени, и вы не будетеЕсли вы хотите не забыть добавить их в этот сценарий включения после развертывания, вы можете циклически перебирать список объектов, связанных с этой сборкой, чтобы создать сценарий динамического SQL, который может перемещать их все без каких-либо затруднений, кроме имени сборки. закодированы (и технически это может даже быть динамическим с использованием переменных MSBuild / SSDT):
DECLARE @SQL NVARCHAR(MAX) = N'';
SELECT @SQL += N'ALTER SCHEMA [foo] TRANSFER [dbo].'
+ QUOTENAME(obj.[name]) + N';' + NCHAR(0x0D) + NCHAR(0x0A)
FROM sys.assembly_modules amd
INNER JOIN sys.assemblies asm
ON asm.[assembly_id] = amd.[assembly_id]
INNER JOIN sys.objects obj
ON obj.[object_id] = amd.[object_id]
WHERE asm.[name] = N'Company.Area.Technology.ProjectName' -- do not use [ and ] here
AND SCHEMA_NAME(obj.[schema_id]) = N'dbo'
PRINT @SQL; -- DEBUG (else, comment out)
EXEC (@SQL);