0

您可以将自己的 clr udt 作为表上的主键吗?看来您不能 - 我添加了用于二进制序列化和可比较的接口,但是在 PK 约束中使用该类型时,我收到一个错误:该类型不能在主键中使用。

那么-这是否可能,如果可以,我需要使用哪些属性来装饰我的类型以允许它?

*编辑:找到我的问题的线索:来自https://docs.microsoft.com/de-de/sql/t-sql/statements/create-index-transact-sql?view=sql-server-2017 部分“ columns":如果类型支持二进制排序,您可以在 CLR 用户定义类型列上创建索引。

所以二进制排序需要是“真的”(我的是假的)。现在的后续问题是:如何序列化您的类型(字符串集合)以使其成为二进制可排序的?

-- 背景资料

我想这样做的原因可能是对一个糟糕的初始想法的更糟糕的跟进:我们当前的数据库实现使用复合业务键。复合键的组件不在“许多”列中,而是在一列中与分隔符连接。例如,“jeep-red-ny”可以是描述位于纽约的红色吉普车的行的主键。包含此连接的列就是 varchar(50)。

我想知道是否有一个“专用”类型来承载这三个方面(车辆类型、颜色、城市)是否会使其更好一些。

我想,最好的选择是删除这些连接的键并在不同的列中使用“普通复合”键。具有串联很好,因为整个键是一列,毫无疑问什么属于它,什么不属于它。UDT 将同时提供:包含在一个列中,但可以访问所有组件。

4

0 回答 0