Установить имя схемы в SqlUserDefinedTypeAttribute - PullRequest
0 голосов
/ 13 февраля 2019

При создании UserDefinedType в коде C # для интеграции с SQLCLR требуется, чтобы вы префикс класса или структуры с SqlUserDefinedType, например, здесь:

[SqlUserDefinedType(
    Name = "g.Options",
    // ...
)]
public struct Options : INullable {
    // ...
}

Обратите внимание, что в «Имя»"Параметр, я пытаюсь установить схему в дополнение к имени объекта.Но когда я генерирую сценарий на этапе публикации проекта базы данных Visual Studio, я получаю:

CREATE TYPE [dbo].[g.Options]

Нет параметра "схемы" для SqlUserDefinedType.

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


РЕДАКТИРОВАТЬ:

Как указывает Соломон Руцкий, вы можете установить схему по умолчанию всвойства проекта.Это, безусловно, не заменит нечто похожее на параметр 'schema' в SqlUserDefinedType, особенно если вы хотите работать с несколькими схемами, но, безусловно, выполняет работу для нужд многих людей.

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

1 Ответ

0 голосов
/ 13 февраля 2019

Имя схемы указывается в отдельном месте для каждого проекта, а не для объекта.

Вы можете установить его в Visual Studio с помощью:

"Проект" (меню) -> "{имя_проекта} Свойства ... "(опция меню) ->" Настройки проекта "(вкладка)

Справа, в разделе" Общие ", есть текстовое поле для" Схема по умолчанию: "

ИЛИ:

Вы можете вручную отредактировать файл {имя_проекта} .sqlproj и один из верхних элементов <PropertyGroup> (элемент, который не имеет "Условие "атрибут; первый такой элемент обычно используется), вы можете создать (или обновить, если он уже существует) следующий элемент:

<DefaultSchema>dbo</DefaultSchema>

ОДНАКО, если вы хотите установить один объект (например,UDT) с именем схемы, отличным от используемого остальными объектами, что должно быть сделано вручную в сценарии SQL Post Release.Вы можете добавить сценарий SQL в свой проект, затем в обозревателе решений с правой стороны выбрать сценарий SQL, перейти к его свойствам, а для «BuildAction» выбрать « PostDeploy ».В этом сценарии после развертывания введите оператор ALTER SCHEMA :

ALTER SCHEMA [g] TRANSFER TYPE::dbo.Options; 
...