为SQLCLR集成而在C#代码中创建UserDefinedType时,要求您在类或结构上添加SqlUserDefinedType前缀,例如:
npm i
请注意,在“名称”(Name)参数中,我尝试设置对象名称之外的模式。但是,当我在Visual Studio数据库项目的发布阶段生成脚本时,我得到:
package.json
对于SqlUserDefinedType没有“ schema”参数。
我确实相信我可以编写T-SQL脚本来专门从程序集中创建类型,但是我想避免这种情况,因为我计划将大多数类型放入不同的模式中,因此不愿意必须通过每个上的显式TSQL注册。
编辑:
正如所罗门·鲁兹基(Solomon Rutzky)所指出的,您可以在项目属性中设置默认模式。当然,它不能替代类似于SqlUserDefinedType中“ schema”参数的内容,特别是如果您要使用多个模式,则可以满足许多人的需求。
部署后脚本从技术上可以完成工作,但是不幸的是,比较引擎不了解部署后逻辑,因此会将架构差异永久注册为需要更改的内容。因此,无论您是否更改它们,所有受影响的对象都会在每次发布时删除并重新创建。
答案 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;