用户自定义类型是SQL Server 2005的新特性。和前几篇文章介绍的SQLCLR相比,UDT相对有此复杂。UDT也有许多限制和必须遵守UDT规范。UDT的二进制不能超过8000个字节,必须包含一个null值表示,因为SQLServer的数据类型是允许null值的。
UDT可以是结构或类。如果是类的话需加[StructLayout(LayoutKind.Sequential)]
标签(属性),这是保证序列化时不改变属性的次序。
现在看一段代码

SQLCLR(四)用户定义类型UDTusing System;
SQLCLR(四)用户定义类型UDT
using System.IO;
SQLCLR(四)用户定义类型UDT
using System.Data;
SQLCLR(四)用户定义类型UDT
using System.Data.SqlClient;
SQLCLR(四)用户定义类型UDT
using System.Data.SqlTypes;
SQLCLR(四)用户定义类型UDT
using Microsoft.SqlServer.Server;
SQLCLR(四)用户定义类型UDT
SQLCLR(四)用户定义类型UDT[Serializable]
SQLCLR(四)用户定义类型UDT[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.UserDefined, MaxByteSize 
= 1024)]
SQLCLR(四)用户定义类型UDT
public struct Person : INullable, IBinarySerialize

部署后在SQL Server 2005中执行下面的语句
SQLCLR(四)用户定义类型UDTcreate table UdtTest (Id int not null, p Person not null)
SQLCLR(四)用户定义类型UDT
insert into UdtTest values(1'David,24岁,男')
SQLCLR(四)用户定义类型UDT
select id, convert(nvarchar(25),p) from UdtTest
SQLCLR(四)用户定义类型UDT
drop table UdtTest
SQLCLR(四)用户定义类型UDT
SQLCLR(四)用户定义类型UDT
结果如下
SQLCLR(四)用户定义类型UDT
想看清楚SQLCLR在对UDT处理机制可以将项目附加到SQL Server 2005进程,在相应的方法设置断点。
SQLCLR(四)用户定义类型UDT 
附:我在写随笔查阅资料时,无意中发现的用VB.NET讲解SQLCLR的PDF文档,相信对用VB.NET的兄弟会有些帮助/Files/DavidFan/HOL067.rar

相关文章: