为什么从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等