您的位置:首页 > 数据库

SQL Server 2005中的CLR总结和自定义类型(UDT)

2010-04-17 18:34 405 查看
文章导航 SQL Server 2005 学习笔记系列文章导航

CLR的最后一节,之前我写过关于自定义函数和XP的小例子,中间有朋友说不太合理,我也承认,呵呵 ,因为我当时也没有想起来用什么来说明它们的作用,不过功能相信大家都 明白了,有朋友问自定义类型是怎么回事,在这里我做个简单的介绍吧;

1.用户定义的类型 (简称UDT)

在早期的2000版本中也存在着这样的功能,使用用户定义的类型 (UDT),可以扩展数据库的标量类型系统(不仅仅为系统类型定义您自己的别名,这在 SQL Server 以前的版本中一直可用)这是官方给下的定义,呵呵,说到这里不知道 大家有没有在数据里使用过UDT,如果有的话好最好,如果没有的话建议大家使用一下,可以根据向导来创建,在Sql2005里的可编辑性---类型--用户自定义类型,右击就可以看到创建功能了,定义 UDT 就像用托管代码编写类,创建程序集,然后使用“create type”语句在 SQL Server 中注册该类型一样简单。下面是实现 UDT 的主干代码:先看看它的格式吧

代码

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native)]
public struct isNumber : INullable
{
public override string ToString()
{
// 用您的代码替换下列代码
return var1.ToString();
}

public bool IsNull
{
get
{
// 在此处放置代码
return m_Null;
}
}

public static isNumber Null
{
get
{
isNumber h = new isNumber();
h.m_Null = true;
return h;
}
}

public static isNumber Parse(SqlString s)
{
if (s.IsNull)
return Null;
isNumber u = new isNumber();

// 返回int类型在这里
if (IsNumber(s.ToString().Trim()))
{
u.var1 = 1;
}
else
{
u.var1 = 0;
}

// 在此处放置代码
return u;
}
/// <summary>
/// 是否数字字符串
/// </summary>
/// <param name="inputData">输入字符串</param>
/// <returns></returns>
public static bool IsNumber(string inputData)
{
Regex RegNumber = new Regex("^[0-9]+$");
Match m = RegNumber.Match(inputData);
return m.Success;
}

// 这是占位符方法
public string Method1()
{
//在此处插入方法代码
return "Hello";
}

// 这是占位符静态方法
public static SqlString Method2()
{
//在此处插入方法代码
return new SqlString("Hello");
}

// 这是占位符字段成员
public int var1;
// 私有成员
private bool m_Null;
}

下一步我们部署一下就行了,方法请参考(SQL Server 2005中的CLR(1) ),可以在Sql2005 里看到



我们可以修改这个表,这个时候我们就能看到自己的数据类型了,

效果如下图



选择我们的类型保存就可以了

下面我在表里写一些数据大家看一下



按我们的方法列type3就是UDT,我们要吧看的出来如果正常的话,前两行应该是0,而第三行是1,第四行和第五行应该是0,最后一行是1

我们看一下执行的结果



和我们想的是一样的,呵呵用法 基本上就是这样,在使用的过程中,大家要注意一下,不要使用Clr来处理增长的建模,怎么说呢,它毕竟是一个自定义的类型,有自己的缺陷,比如说每行的长度不能超过8KB等,如果要使用更高级点的功能大家自己动手吧;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐