39

The following code implements an UDT which derives from a generic (SortedDictionary):

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

Creating the type (T-SQL):

CREATE TYPE dbo.udtMassSpectra EXTERNAL NAME MassSpectra.udtMassSpectra;

throws an exception:

Msg 10331, Level 16, State 1, Line 1 Type 'udtMassSpectra' in assembly 'MassSpectra' derives from a generic type which is not supported for a CLR Type.

What is the reason? Is there any workaround other than hiding the base class within a private member? This code works fine on a SQL-Server 2005.

4

3 回答 3

1

另一个建议:

验证类型是否被定义为类,不是原始的、嵌套的或泛型的

PS:

至于“在 MSSQL 2005 上工作但不是在 MSSQL 2008 上工作”——我引用 Tom Petty 的话:“你很幸运,宝贝!” ;)

于 2012-06-26T17:39:13.207 回答
0

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

我做了一些研究,发现了这个here

于 2012-04-13T14:49:43.613 回答
0

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

出于好奇,我想看看泛型类是如何在 T-SQL 上下文中实例化的,作为列数据类型、变量等。

于 2012-05-23T21:14:32.777 回答