【发布时间】:2019-07-06 16:05:48
【问题描述】:
在 C# 代码中为 SQLCLR 集成创建 UserDefinedType 时,需要为类或结构添加 SqlUserDefinedType 前缀,例如:
[SqlUserDefinedType(
Name = "g.Options",
// ...
)]
public struct Options : INullable {
// ...
}
请注意,在“名称”参数中,除了对象名称之外,我还尝试设置模式。但是,当我在 Visual Studio 数据库项目的发布阶段生成脚本时,我得到:
CREATE TYPE [dbo].[g.Options]
SqlUserDefinedType 没有“模式”参数。
我确实相信我可以编写 T-SQL 脚本来专门从程序集中生成类型,但我想避免这种情况,因为我计划将我的大多数类型放在不同的模式中并且不乐意必须通过显式的 TSQL 在每个上进行注册。
编辑:
正如 Solomon Rutzky 所指出的,您可以在项目属性中设置默认模式。它当然不能替代 SqlUserDefinedType 中类似于“模式”参数的东西,特别是如果您想使用多个模式,但它确实可以满足许多人的需求。
从技术上讲,部署后脚本可以完成工作,但不幸的是,比较引擎不了解部署后逻辑,因此会永久地将架构差异记录为需要更改的内容。因此,无论您是否更改它们,每次发布时都会删除并重新创建所有受影响的对象。
【问题讨论】:
标签: sql-server database-schema sqlclr user-defined-types