UDT: user defined type. 简单说就是用自己开发的类作为数据库字段类型。
在VS2005的SQL2005 Server项目中增加User-Defined Type, 自动生成Type1, 简单修改如下:
注意:
比如包含方法:ToString() / Parse(SqlString)
增加了方法Hello()。
项目编译部署完毕。在定义表结构的时候就可以在类型选项表中看到自定义类型dbo.Type2。
在VS2005 Server Explorer View里面,编辑这个表,可以象普通类型一样输入数据,输入无效数字时会以0代替。说明Parse()方法被调用.
执行查询:SELECT abc.Hello('x') FROM dbo.[User] 返回:
Hello: 3
Hello: -33
说明Hello方法被成功调用。
不足:
UDT重新编译部署时会报错,提示该类型已经被使用。在数据没有发生变化的情况下,这种检查似乎 有些多余。
好处:
对数据提供自定义转换处理。
可以用来包装杂七杂八的数据
包装复杂结构数据(树形、列表)
提供数据类型的辅助说明。
UDT的出现似乎否定了刚出生的XML字段类型。XML类型还有什么存在的理由呢?
参考:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql_ovyukonnetprogfeatures.asp
在VS2005的SQL2005 Server项目中增加User-Defined Type, 自动生成Type1, 简单修改如下:
using System;
using System.Data.Sql;
using System.Data.SqlTypes;
[Serializable]
[SqlUserDefinedType(Format.SerializedDataWithMetadata, MaxByteSize = 512)]
public class Type2 : INullable
{
public int v;
public override string ToString()
{
return v.ToString();
}
public bool IsNull
{
get
{
return v == 0;
}
}
public static Type2 Null
{
get
{
Type2 h = new Type2();
return h;
}
}
public static Type2 Parse(SqlString s)
{
if (s.IsNull || s.Value.ToLower().Equals("null"))
return Null;
Type2 u = new Type2();
int.TryParse(s.ToString(),out u.v);
return u;
}
public SqlString Hello(SqlString Param1)
{
return "Hello: "+v;
}
}
using System.Data.Sql;
using System.Data.SqlTypes;
[Serializable]
[SqlUserDefinedType(Format.SerializedDataWithMetadata, MaxByteSize = 512)]
public class Type2 : INullable
{
public int v;
public override string ToString()
{
return v.ToString();
}
public bool IsNull
{
get
{
return v == 0;
}
}
public static Type2 Null
{
get
{
Type2 h = new Type2();
return h;
}
}
public static Type2 Parse(SqlString s)
{
if (s.IsNull || s.Value.ToLower().Equals("null"))
return Null;
Type2 u = new Type2();
int.TryParse(s.ToString(),out u.v);
return u;
}
public SqlString Hello(SqlString Param1)
{
return "Hello: "+v;
}
}
比如包含方法:ToString() / Parse(SqlString)
增加了方法Hello()。
项目编译部署完毕。在定义表结构的时候就可以在类型选项表中看到自定义类型dbo.Type2。
在VS2005 Server Explorer View里面,编辑这个表,可以象普通类型一样输入数据,输入无效数字时会以0代替。说明Parse()方法被调用.
执行查询:SELECT abc.Hello('x') FROM dbo.[User] 返回:
Hello: 3
Hello: -33
说明Hello方法被成功调用。
不足:
UDT重新编译部署时会报错,提示该类型已经被使用。在数据没有发生变化的情况下,这种检查似乎 有些多余。
好处:
对数据提供自定义转换处理。
可以用来包装杂七杂八的数据
包装复杂结构数据(树形、列表)
提供数据类型的辅助说明。
UDT的出现似乎否定了刚出生的XML字段类型。XML类型还有什么存在的理由呢?
参考:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql_ovyukonnetprogfeatures.asp