电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

如何:創(chuàng)建和運(yùn)行 CLR SQL Server 用戶定義的類型

瀏覽:176日期:2023-11-07 10:51:32

通過將“用戶定義的類型”添加到 SQL Server 項(xiàng)目,可以創(chuàng)建 SQL 用戶定義的類型。部署成功后,可以將該類型用于可使用系統(tǒng)類型的所有上下文,包括列定義、變量、參數(shù)、函數(shù)結(jié)果、光標(biāo)、觸發(fā)器和復(fù)制等。UDT 為用戶提供了 SQL Server 數(shù)據(jù)類型系統(tǒng)的擴(kuò)展性,還提供了定義復(fù)雜結(jié)構(gòu)類型的功能。

注意; 在默認(rèn)情況下,Microsoft SQL Server 中關(guān)閉了公共語言運(yùn)行庫 (CLR) 集成功能。必須啟用該功能才能使用 SQL Server 項(xiàng)目項(xiàng)。若要啟用 CLR 集成,請使用 sp_configure 存儲(chǔ)過程的“啟用 clr”選項(xiàng)。有關(guān)更多信息,請參見啟用 CLR 集成。注意; 顯示的對話框和菜單命令可能會(huì)與幫助中的描述不同,具體取決于您現(xiàn)用的設(shè)置或版本。若要更改設(shè)置,請?jiān)凇肮ぞ摺辈藛紊线x擇“導(dǎo)入和導(dǎo)出設(shè)置”。有關(guān)更多信息,請參見 Visual Studio 設(shè)置。

創(chuàng)建用戶定義的類型創(chuàng)建 SQL 用戶定義的類型打開一個(gè)現(xiàn)有的“SQL Server 項(xiàng)目”,或者創(chuàng)建一個(gè)新項(xiàng)目。有關(guān)更多信息,請參見如何:創(chuàng)建 SQL Server 項(xiàng)目。

從“項(xiàng)目”菜單中選擇“添加新項(xiàng)”。

在“添加新項(xiàng)”對話框 中選擇“用戶定義的類型”。

為新的 UDT 鍵入“名稱”。

添加用于定義和創(chuàng)建 UDT 的代碼。請參見下面的第一個(gè)示例。

注意; C++ 示例在編譯時(shí)必須使用 /clr:safe 編譯器選項(xiàng)。

對于 Visual Basic 和 Visual C#,在“解決方案資源管理器”中,打開“TestScripts”文件夾,再雙擊“Test.sql”文件。

對于 Visual C++,在“解決方案資源管理器”中,雙擊“debug.sql”文件。

將代碼添加到“Test.sql”(Visual C++ 中為“debug.sql”)文件中以執(zhí)行 UDT。請參見下面的第二個(gè)示例。

按 F5 生成、部署和調(diào)試 UDT。有關(guān)不進(jìn)行調(diào)試直接部署的信息,請參見如何:將 SQL Server 項(xiàng)目項(xiàng)部署到 SQL Server 中。

在“輸出”窗口 中查看結(jié)果,然后選擇“從此處顯示輸出:數(shù)據(jù)庫輸出”。

示例此示例創(chuàng)建一個(gè) Point 類型,該類型的用法與其他簡單類型一樣。使用 Serializable 和 SqlUserDefinedTypeAttribute 屬性來修飾這個(gè)類聲明。SqlUserDefinedTypeAttribute 的 Format 屬性決定了 UDT 的存儲(chǔ)格式。該類型通過實(shí)現(xiàn) Parse 和 ToString 方法來實(shí)現(xiàn)字符串轉(zhuǎn)換。此外,該類型還實(shí)現(xiàn)兩個(gè)屬性過程,以便為此類所表示的點(diǎn)獲取和設(shè)置 X 和 Y 的值。

Visual Basic 復(fù)制代碼Imports SystemImports System.Data.SqlTypesImports Microsoft.SqlServer.Server

<Serializable()> _<SqlUserDefinedType(Format.Native)> _Public Structure Point Implements INullable

Private m_x As Int32 Private m_y As Int32 Private is_Null As Boolean

Public Property X() As Int32 Get Return (Me.m_x) End Get Set(ByVal Value As Int32) m_x = Value End Set End Property

Public Property Y() As Int32 Get Return (Me.m_y) End Get Set(ByVal Value As Int32) m_y = Value End Set End Property

Public ReadOnly Property IsNull() As Boolean Implements INullable.IsNull Get Return is_Null End Get End Property

Public Shared ReadOnly Property Null() As Point Get Dim pt As Point = New Point pt.is_Null = True Return pt End Get End Property

Public Overrides Function ToString() As String If Me.IsNull() Then Return Nothing Else Return Me.m_x & ':' & Me.m_y End If End Function

Public Shared Function Parse(ByVal s As SqlString) As Point If s = SqlString.Null Then Return Null End If

If s.ToString() = SqlString.Null.ToString() Then Return Null End If

If s.IsNull Then Return Null End If

'Parse input string here to separate out coordinates Dim str As String = Convert.ToString(s) Dim xy() As String = str.Split(':'c)

Dim pt As New Point() pt.X = CType(xy(0), Int32) pt.Y = CType(xy(1), Int32) Return (pt) End Function

Public Function Quadrant() As SqlString

If m_x = 0 And m_y = 0 Then Return 'centered' End If

Dim stringResult As String = ''

Select Case m_x Case 0 stringResult = 'center' Case Is > 0 stringResult = 'right' Case Is < 0 stringResult = 'left' End Select

Select Case m_y Case 0 stringResult = stringResult & ' center' Case Is > 0 stringResult = stringResult & ' top' Case Is < 0 stringResult = stringResult & ' bottom' End Select

Return stringResult End FunctionEnd StructureC# 復(fù)制代碼using System;using System.Data.SqlTypes;using Microsoft.SqlServer.Server;

[Serializable()][SqlUserDefinedType(Format.Native)]public struct Point : INullable{ private Int32 m_x; private Int32 m_y; private bool is_Null;

public Int32 X { get { return (this.m_x); } set { m_x = value; } }

public Int32 Y { get { return (this.m_y); } set { m_y = value; } }

public bool IsNull { get { return is_Null; } }

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

public override string ToString() { if (this.IsNull) { return 'NULL'; } else { return this.m_x + ':' + this.m_y; } }

public static Point Parse(SqlString s) { if (s.IsNull) { return Null; }

// Parse input string here to separate out coordinates string str = Convert.ToString(s); string[] xy = str.Split(':');

Point pt = new Point(); pt.X = Convert.ToInt32(xy[0]); pt.Y = Convert.ToInt32(xy[1]); return (pt); }

public SqlString Quadrant() { if (m_x == 0 && m_y == 0) { return 'centered'; }

SqlString stringReturn = '';

if (m_x == 0) { stringReturn = 'center'; } else if (m_x > 0) { stringReturn = 'right'; } else if (m_x < 0) { stringReturn = 'left'; }

if (m_y == 0) { stringReturn = stringReturn + ' center'; } else if (m_y > 0) { stringReturn = stringReturn + ' top'; } else if (m_y < 0) { stringReturn = stringReturn + ' bottom'; }

return stringReturn; }}C++ 復(fù)制代碼#include 'stdafx.h'

#using <System.dll>#using <System.Data.dll>#using <System.Xml.dll>

using namespace System;using namespace System::Data;using namespace System::Data::Sql;using namespace System::Data::SqlTypes;using namespace Microsoft::SqlServer::Server;

// In order to debug your User-Defined Types, add the following to your debug.sql file://// CREATE TABLE test_table (column1 Point)//// INSERT INTO test_table (column1) VALUES ('1:2')// INSERT INTO test_table (column1) VALUES ('-2:3')// INSERT INTO test_table (column1) VALUES ('-3:-4')//// SELECT column1.Quadrant() FROM test_table//// DROP TABLE test_table//[Serializable][SqlUserDefinedType(Format::Native)]public value struct Point : public INullable{private: Int32 m_x; Int32 m_y; bool is_Null;

public: property Int32 X { Int32 get() { return (this->m_x); } void set(Int32 value) { m_x = value; } }

property Int32 Y { Int32 get() { return (this->m_y); } void set(Int32 value) { m_y = value; } }

virtual property bool IsNull { bool get() { return is_Null; } }

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

virtual String ^ToString() override { if (this->IsNull) { return 'NULL'; } else { return this->m_x + ':' + this->m_y; } }

static Point Parse(SqlString s) { if (s.IsNull) { return Null; }

// Parse input string here to separate out coordinates String ^str = Convert::ToString(s); array<String ^> ^xy = str->Split(':');

Point pt; pt.X = Convert::ToInt32(xy[0]); pt.Y = Convert::ToInt32(xy[1]); return (pt); }

SqlString Quadrant() { if (m_x == 0 && m_y == 0) { return 'centered'; }

SqlString stringReturn = '';

if (m_x == 0) { stringReturn = 'center'; } else if (m_x > 0) { stringReturn = 'right'; } else if (m_x < 0) { stringReturn = 'left'; }

if (m_y == 0) { stringReturn = stringReturn + SqlString(' center'); } else if (m_y > 0) { stringReturn = stringReturn + SqlString(' top'); } else if (m_y < 0) { stringReturn = stringReturn + SqlString(' bottom'); }

return stringReturn; }};

將用于執(zhí)行和測試用戶定義類型 (Point) 的代碼添加到“Test.sql”(Visual C++ 中為“debug.sql”)文件中,該文件在項(xiàng)目的“TestScripts”文件夾中。例如,若要檢查新類型,可以創(chuàng)建一個(gè)使用此類型的表。下面的示例演示如何在創(chuàng)建表的過程中使用 Point 類型。

復(fù)制代碼CREATE TABLE test_table (column1 Point)go

INSERT INTO test_table (column1) VALUES ('1:2')INSERT INTO test_table (column1) VALUES ('-2:3')INSERT INTO test_table (column1) VALUES ('-3:-4')

select column1.Quadrant() from test_table

標(biāo)簽: Sql Server 數(shù)據(jù)庫
主站蜘蛛池模板: 双舌接地线-PC68数字式高阻计-ZC36|苏海百科 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | IP检测-检测您的IP质量| 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 硬度计_影像测量仪_维氏硬度计_佛山市精测计量仪器设备有限公司厂家 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 上海宿田自动化设备有限公司-双面/平面/单面贴标机 | 建筑工程资质合作-工程资质加盟分公司-建筑资质加盟 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 | 潍坊大集网-潍坊信息港-潍坊信息网 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 交通信号灯生产厂家_红绿灯厂家_电子警察监控杆_标志杆厂家-沃霖电子科技 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 | 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 日本东丽膜_反渗透膜_RO膜价格_超滤膜_纳滤膜-北京东丽阳光官网 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 杭州成人高考_浙江省成人高考网上报名| 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 |