为什么SQL Server 2008及更高版本不支持从泛型派生的CLR类型?

jah*_*ahu 39 c# t-sql generics sql-server-2008 sql-server-2012

以下代码实现了一个UDT,它派生自泛型(SortedDictionary):

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

创建类型(T-SQL):

CREATE TYPE dbo.udtMassSpectra EXTERNAL NAME MassSpectra.udtMassSpectra;
Run Code Online (Sandbox Code Playgroud)

抛出异常:

消息10331,级别16,状态1,行1在程序集"MassSpectra"中键入'udtMassSpectra'派生自CLR类型不支持的泛型类型.

是什么原因?除了将基类隐藏在私有成员中之外,还有其他解决方法吗?此代码适用于SQL-Server 2005.

Lud*_*uer 0

我没有使用 UDT 的经验,但问题可能是 float 无法表示 SQL-Server 的 NULL 值。

我做了一些研究并在这里找到了这个