🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.database
Article #832

[MSSQL] CLR UDT

#832
From: Galaxy��VOLUNTEERS��Database
Date: Wed, 19 Nov 2008 06:29
95 lines
5505 bytes
��Ȼ"When Should I Use SQL-Server CLR User Definied Types 
(UDT)?"<http://weblogs.asp.net/alex_papadimoulis/archive/2005/10/20/428014.as
px>��ƪ�������ᵽ�����µĹ۵㣺
Fortunately, with SQL Server's CLR UDTs, knowing when to use them is pretty 
clear: 
Never. 
���ò�˵����������൱������ͨ���׶�����ϸ�����ɿ����Լ����ģ�Ȼ����������
�������Լ����жϣ����õ��ճ��ñ���ԥ������ͻ���case����ص����⣬�����о���
��Ҫ�о��ġ�����
�����case��������������ȸ㶮��������Ǹ�ʲô�ġ�

��ǰ�ù�һ��UDT����������T-SQLŪ�ģ�SSIS����������ݿ�ʱ�����ģ���������Ҳ��
�Ƕ��������Ϊmonthʵ�ʻ���int��type��CLR UDT����CLR��ʽ��UDT������ΪʲôҪUD
T��������Ȼ��SQL Server�Դ���޷����������ˡ�UDT���԰���Ԫ�أ�element����
�ж�����Ϊ��behavior��������Ȼ���ܶ�����ٻ�Ӱ��Щ���ܡ���Ҫ�����������棻
1. Date, time, currency, and extended numeric types
2. Geospatial applications����������������spatial���͵�case����Ϊ��UDT���Բ�
������linq����Ȼ�и��ǹٷ���workaround��
3. Encoded or encrypted data

һ��ʹ��CLR UDT�IJ������£�
1. ��������UDT��assembly
2. ע��assembly
3. ��SQL Server���UDT
4. ����ʹ��UDT�ı?�����Ͳ���

msdn���и�������룺ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_2devguide/h
tml/0feb8b08-4062-467b-8433-e88e4e302738.htm�����¾��Ǵ���һ�����к�������
�������͡�

һ����˵�Ƽ���UDT����Ϊһ���ṹ�壬����Ҳ���Դ���Ϊһ���ࡣ
UDT�����������µ�Ҫ��
1. UDT����ָ��Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute���Ƽ�ʹ
��System.SerializableAttribute
����
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native,
     IsByteOrdered=true, ValidationMethodName = "ValidatePoint")]
���ö��л�������UserDefined Serialization��Serialization Attributes��
2. ���ṹ���б����� System.Data.SqlTypes.INullable �ӿڣ���ΪSQL ServerĬ��
��null-aware�ģ�
����
private bool is_Null;

public bool IsNull
{
    get
    {
        return (is_Null);
    }
}

public static Point Null
{
    get
    {
        Point pt = new Point();
        pt.is_Null = true;
        return pt;
    }
}
.....

�����кܶ�requirements������д�ˡ�����

һ����˵Microsoft.SqlServer.Server ��System.Data.SqlTypes ������namespaceҲ��
ͨ��Ҫ�ӵġ�
����ϸ����ô��д���Բο���Coding User-Defined Types ��<ms-help://MS.SQLCC.v10
/MS.SQLSVR.v10.en/s10de_2devguide/html/1e5b43b3-4971-45ee-a591-3f535e2ac722.h
tm>

ע��assembly������UIҲ������T-SQL������UDT��CREATE TYPE
ע��UDT���ܿ�Database������ÿ����ݿⶼҪ����assembly��
����ʹ��UDT����ر��ʹ����ͨ����ûɶ���
CREATE TABLE dbo.Points 
(ID int IDENTITY(1,1) PRIMARY KEY, PointValue Point)
����ֵ��Ҫconvert��castһ�£�
INSERT INTO dbo.Points (PointValue) VALUES (CONVERT(Point, '3,4'));
��ѯ���Ҫ��ʾ�Ļ���Ҫת��һ�£�
SELECT ID, PointValue.ToString() AS PointValue 
FROM dbo.Points;

��ADO.NET�з���UDT�������������ַ�����
1. ��System.Data.SqlClient.SqlDataReader ��Ϊobject
2. ��SqlDataReader��Ϊraw bytes
3. ��System.Data.SqlClient.SqlParameter ������
Update������DataAdapters 

�ðɣ�case������������������report�ˡ�������ë���ַ��ˡ������������������� 
--
Welcome to Database Board
��ӭ������ݿ��
http://bbs.sjtu.edu.cn/bbsdoc?board=database

�� ��Դ:����ˮ˼Դ bbs.sjtu.edu.cn��[FROM: 207.46.55.30]
Technical Details
Message-ID: <4d7P6A$b8g@bbs.sjtu.edu.cn>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!news.neu.edu.cn!news.shec6.edu.cn!SJTU

Show Full Headers
Complete Article Headers
X-Google-Thread: 101948,700dfd2c22b7fd2f,start
X-Google-Attributes: gid101948,domainid0,public,usenet
X-Google-Language: Chinese,GB
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!news.neu.edu.cn!news.shec6.edu.cn!SJTU
From: Dem.bbs@bbs.sjtu.edu.cn (Galaxy��VOLUNTEERS��Database)
Newsgroups: cn.bbs.comp.database
Subject: [MSSQL] CLR UDT
Date: 19 Nov 2008 06:29:09 GMT
Organization: ��ˮ˼Դ
Message-ID: <4d7P6A$b8g@bbs.sjtu.edu.cn>
Mime-Version: 1.0
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: 8bit
X-Filename: database/M.1227076138.A
Lines: 94