在SqlUserDefinedTypeAttribute中设置架构名称

时间:2019-02-12 22:40:16

标签: sql-server database-schema sqlclr user-defined-types

为SQLCLR集成而在C#代码中创建UserDefinedType时,要求您在类或结构上添加SqlUserDefinedType前缀,例如:

npm i

请注意,在“名称”(Name)参数中,我尝试设置对象名称之外的模式。但是,当我在Visual Studio数据库项目的发布阶段生成脚本时,我得到:

package.json

对于SqlUserDefinedType没有“ schema”参数。

我确实相信我可以编写T-SQL脚本来专门从程序集中创建类型,但是我想避免这种情况,因为我计划将大多数类型放入不同的模式中,因此不愿意必须通过每个上的显式TSQL注册。


编辑:

正如所罗门·鲁兹基(Solomon Rutzky)所指出的,您可以在项目属性中设置默认模式。当然,它不能替代类似于SqlUserDefinedType中“ schema”参数的内容,特别是如果您要使用多个模式,则可以满足许多人的需求。

部署后脚本从技术上可以完成工作,但是不幸的是,比较引擎不了解部署后逻辑,因此会将架构差异永久注册为需要更改的内容。因此,无论您是否更改它们,所有受影响的对象都会在每次发布时删除并重新创建。

1 个答案:

答案 0 :(得分:1)

在每个项目而不是每个对象的单个位置指定架构名称。

您可以通过以下方法在Visual Studio中进行设置:

“项目”(菜单)->“ {项目名称}属性...”(菜单选项)->“项目设置”(标签)

在右侧的“常规”部分中,有一个文本字段,用于“默认架构:”

OR:

您可以手动编辑 {project_name} .sqlproj 文件,并在顶部的<PropertyGroup>元素之一(没有“ Condition”属性的元素;第一个此类元素通常使用),则可以创建(或更新(如果已存在)以下元素:

<DefaultSchema>dbo</DefaultSchema>

但是,如果要将一个对象(例如UDT)设置为与其余对象所使用的模式名称不同的模式名称,则必须在Post Release SQL脚本中手动完成。您可以将SQL脚本添加到项目中,然后在右侧的解决方案资源管理器中,选择SQL脚本,转到其“属性”,并为“ BuildAction”选择“ PostDeploy ”。在该部署后脚本中,发出ALTER SCHEMA语句:

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