为什么从SQL Server 2008及更高版本中不支持generics派生的CLRtypes?

以下代码实现了从generics(SortedDictionary)派生的UDT:

[Serializable] [Microsoft.SqlServer.Server.SqlUserDefinedType(Format.UserDefined, MaxByteSize = 8000)] public class udtMassSpectra : SortedDictionary<float, float>, INullable, IBinarySerialize, ICloneable, IDisposable { ... } 

创buildtypes(T-SQL):

 CREATE TYPE dbo.udtMassSpectra EXTERNAL NAME MassSpectra.udtMassSpectra; 

抛出exception:

程序集“MassSpectra”中的消息10331,级别16,状态1,行1types“udtMassSpectra”派生自CLRtypes不支持的genericstypes。

是什么原因? 除了在私有成员中隐藏基类之外,是否有任何解决方法? 此代码在SQL Server 2005上正常工作。

另一个build议是:

确认types被定义为一个类,不是原始的,嵌套的或通用的

PS:

就“MSSQL 2005而不是MSSQL 2008”而言 – 我引用Tom Petty的话:“你真幸运,宝贝! ;)

我没有UDT的经验,但也许问题是,浮动不能够代表SQL Server的NULL值。

我做了一些研究,发现这里

您可以非常简单地通过在您的UDT中存储SortedDictionary<float, float>的实例来解决此限制。

出于好奇,我想看看generics类是如何在T-SQL上下文中实例化的,作为列数据types,variables等