Не удалось загрузить CLR UDT на сервере Sql с помощью CREATE TYPE

Я создал UDT с помощью C# и скомпилировал его с помощью .NETFW 2.0. Я успешно добавил его в базу данных и вижу его, когда делаю "выбрать * из sys.assemblies"

Теперь я пытаюсь использовать UDT, определенный в сборке, следующим образом:

CREATE TYPE dbo.SourceLocation
EXTERNAL NAME MyAssembly.[example.com.SourceLocation];

Однако, когда я это делаю, я получаю следующую ошибку:

Сообщение 6244, уровень 16, состояние 1, строка 1 Размер (0) для «MyAssembly.example.com.SourceLocation» не находится в допустимом диапазоне. Размер должен быть равен -1 или числу от 1 до 8000.

Есть идеи, что я могу делать неправильно? Я вижу тип, когда запускаю ildasm.exe.

Я добавил сборку с помощью командной строки. Я не использую для этого проект базы данных VS.


person feroze    schedule 27.03.2012    source источник


Ответы (1)


У вас есть исходный файл? Проверить атрибут MaxByteSize? Если его там нет, добавьте его или измените значение, например.

[Serializable]
[SqlUserDefinedType(Format.UserDefined, 
IsByteOrdered = true, MaxByteSize = 32)]
[CLSCompliant(false)]
public struct Currency : INullable, IComparable, IBinarySerialize
{
person Russell Hart    schedule 27.03.2012
comment
Спасибо Рассел. Это сработало для меня. В дополнение к вашему коду мне пришлось изменить MaxByteSize на -1, потому что я хранил большие строки. - person feroze; 28.03.2012