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等,如果要使用更高级点的功能大家自己动手吧;
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等,如果要使用更高级点的功能大家自己动手吧;
相关文章推荐
- SQL Server 2005中自定义类型(UDT)深入实例
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- SQL2005 CLR: UDT用户定义类型 part1
- SQL SERVER 2005 CLR 部署UDT,Triggers,Functions,Procedure,Aggregates
- sql server 2005 使用clr函数压缩ntext类型字段
- SQL Server 2005中XML数据类型的的相关知识总结
- Inside Microsoft SQL Server 2005: T-SQL Programming (数据类型|第一章) 基于CLR的自定义数据类型
- SQL2005 CLR: UDT用户定义类型 part3
- SQL SERVER 2005 CLR 部署UDT,Triggers,Functions,Procedure,Aggregates
- SQL server 2005 调用自定义函数
- SQL Server 2005中开发通用的自定义函数,实现类似Min或MAX函数功能(附源码)
- 在Eclipse中用JDBC连接Sql Server 2005总结
- SQL Server 2005与Oracle同步注意NUMBER类型转换
- 41_自定义泛型方法的练习与类型推断总结
- SQL Server 2005 自定义split 函数
- [WinForm ADO.NET实现TaskVision][SQL Server 2008][winform datagridview总结][自定义Custom控件]Winform DataGridView各种现有column及自定义column+Winform自定义控件
- SQL Server 2005 数据类型和.Net数据类型的对应关系
- 在SQL Server 2005中运行CLR
- SQL Server 2005 CTE学习总结
- SQL Server 2005 得到某个表中某字段的数据类型