您可以将自己的clr udt用作表上的主键吗?看来您不能-我为二进制序列化和可比性添加了接口,但是在PK约束中使用该类型时,我收到一个错误:该类型不能在主键中使用。
那么-完全有可能吗?如果可以,我需要使用哪些属性来修饰我的类型?
*编辑: 找到了我的问题的线索:来自https://docs.microsoft.com/de-de/sql/t-sql/statements/create-index-transact-sql?view=sql-server-2017 “列”部分:如果类型支持二进制排序,则可以在CLR用户定义的类型列上创建索引。
因此二进制排序必须为“ true”(我的是false)。现在的后续问题是:如何序列化您的类型(字符串集合),使其变为二进制可排序的?
-背景信息
我这样做的原因可能是对一个糟糕的初始想法的更差的跟进:我们当前的数据库实现使用复合业务密钥。组合键的组件不在“许多”列中,而是在一列中与分隔符连接在一起。例如,“ jeep-red-ny”可以是描述位于纽约的红色(红色)吉普车的行的主键。包含此串联的列就是varchar(50)。
我想知道是否可以使用“专用”类型来容纳这三个方面(车辆类型,颜色,城市),从而使它变得更好。
我想,最好的选择是删除这些串联的键,并在不同的列中使用“普通复合”键。以整个键为一列的方式进行串联是很好的,毫无疑问,它属于什么而不属于什么。 UDT会在一个列中同时提供两个:,但可以访问所有组件。