亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

CLR Table-Valued函數

2024-07-21 02:47:28
字體:
來源:轉載
供稿:網友
CLR Table-Valued函數

這幾天來,努力學習了CLR的存儲過程,創建與部署。從普通的存儲過程,帶參數,以及Output返回值等。Insus.NET今天學習一個例子,怎樣實現CLR Table-Valued函數。在數據庫中,我們可以看到很多種函數類型,Table-falued function,Scalar-valued function 等等。

這篇練習的CLR中編寫的函數就是table-valued function。

在VS開發SQL的 CLR程序,有簡單有復雜,看開發時的衡量了。有些在SQL中無法實現的,可以寫成CLR,然后再部署至SQL中。此篇并沒有看出兩者之間的優勢,僅是一個例子作為參考。比如我們想創建一個多表查詢LEFT JOIN。把SQL語句寫成一個table-valued函數。這個多表查詢,所返回的字段,定義成一個類別:上面代碼示例,可復制代碼:

using System;using System.Collections.Generic;using System.Data;using System.Data.SqlTypes;using System.Text;namespace Insus.NET{    class Fruit    {        public byte Fruit_nbr { get; set; }        public byte  FruitCategory_nbr { get; set; }        public string CategoryName { get; set; }        public byte FruitKind_nbr { get; set; }        public string  KindName { get; set; }        public string  FruitName { get; set; }    }}
View Code

創建一個新Item: 按下面的步驟,在標記5中選擇SQL CLR C# User Defined Function。

標記6,給一個名字,標記7"Add"之后:

刪除#14至#19行代碼,添加下面代碼:

上面代碼示例,可復雜代碼:

using System;using System.Data;using System.Data.SqlClient;using System.Data.SqlTypes;using Microsoft.SqlServer.Server;using System.Collections;using Insus.NET;using System.Collections.Generic;public partial class UserDefinedFunctions{    [SqlFunction(Dataaccess = DataAccessKind.Read,                 FillRowMethodName = "Item_FillRow",                 TableDefinition = "Fruit_nbr TINYINT,FruitCategory_nbr TINYINT, " +                                  "CategoryName NVARCHAR(30),FruitKind_nbr TINYINT," +                                  "KindName NVARCHAR(30),FruitName NVARCHAR(30)"                 )    ]    public static IEnumerable Tvf_Fruit()    {        List<Fruit> fruitConnections = new List<Fruit>();        using (SqlConnection connection = new SqlConnection("context connection=true"))        {            connection.Open();            string sql = "SELECT [Fruit_nbr],[FruitCategory_nbr],[CategoryName]," +                "u_fk.[FruitKind_nbr],[KindName],[FruitName] FROM [dbo].[Fruit] AS f " +                "LEFT JOIN [dbo].[udf_FruitKind]() AS u_fk ON (f.[FruitKind_nbr] = u_fk.[FruitKind_nbr])";            using (SqlCommand command = new SqlCommand(sql, connection))            {                using (SqlDataReader objDr = command.ExecuteReader())                {                    while (objDr.Read())                    {                        Fruit oFruit = new Insus.NET.Fruit();                        oFruit.Fruit_nbr = (byte)objDr["Fruit_nbr"];                        oFruit.FruitCategory_nbr = (byte)objDr["FruitCategory_nbr"];                        oFruit.CategoryName = objDr["CategoryName"].ToString();                        oFruit.FruitKind_nbr = (byte)objDr["FruitKind_nbr"];                        oFruit.KindName = objDr["KindName"].ToString();                        oFruit.FruitName = objDr["FruitName"].ToString();                        fruitConnections.Add(oFruit);                    }                }            }        }        return fruitConnections;    }    PRivate static void Item_FillRow(object source, out SqlByte fruit_nbr,        out SqlByte fruitCategory_nbr, out SqlChars categoryName,        out SqlByte fruitKind_nbr, out SqlChars kindName, out SqlChars fruitName)    {        Fruit fruit = (Fruit)source;        fruit_nbr = new SqlByte(fruit.Fruit_nbr);        fruitCategory_nbr = new SqlByte(fruit.FruitCategory_nbr);        categoryName = new SqlChars(fruit.CategoryName);        fruitKind_nbr = new SqlByte(fruit.FruitKind_nbr);        kindName = new SqlChars(fruit.KindName);        fruitName = new SqlChars(fruit.FruitName);    }}
View Code

接下來,Build,然后可以部署至SQL中去。上面可復制代碼:

IF EXISTS (SELECT * FROM sys.objects WHERE name = 'Tvf_Fruit')    DROP FUNCTION Tvf_Fruit;GOIF EXISTS (SELECT * FROM sys.assemblies WHERE name = 'FruitClr')    DROP ASSEMBLY FruitClr;GOCREATE ASSEMBLY FruitClrFROM 'E:/FruitClr.dll' WITH PERMISSION_SET = SAFE;GOCREATE FUNCTION Tvf_Fruit()RETURNS TABLE (    Fruit_nbr TINYINT,    FruitCategory_nbr TINYINT,    CategoryName NVARCHAR(30),    FruitKind_nbr TINYINT,    KindName NVARCHAR(30),    FruitName NVARCHAR(30))ASEXTERNAL NAME [FruitClr].UserDefinedFunctions.Tvf_Fruit;GO
View Code

執行成功之后,你肯定會發現SQL發生變化的兩個位置:

此時table-valued function創建成功了,在查詢分析器執行一下Tvf_Fruit()函數。

下面內容于2015-03-31 09:30分添加:看看執行的效率如何? 標記1是原始寫法,標記2是寫成Clr函數。它們得到結果是一樣的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲va电影大全| 欧美最猛性xxxxx免费| 亚洲国产精品久久| 日韩欧美福利视频| 亚洲美女中文字幕| 欧美一区二粉嫩精品国产一线天| 中文字幕精品在线视频| 亚洲欧美在线磁力| 日韩a**中文字幕| 久久视频在线直播| 国产精品亚洲美女av网站| 亚洲区免费影片| 欧美第一黄网免费网站| 亚洲欧美www| 91人人爽人人爽人人精88v| 成人国产在线视频| 亚洲视频综合网| 裸体女人亚洲精品一区| 国产成人精品av在线| 一区二区三区久久精品| 日韩精品免费综合视频在线播放| 日韩av在线免费观看| 欧美激情手机在线视频| 国语自产精品视频在线看抢先版图片| 91国语精品自产拍在线观看性色| 中文字幕精品视频| 欧美人与物videos| 亚洲r级在线观看| 日韩一区二区三区在线播放| 欧美xxxx做受欧美.88| 欧美精品在线免费| 日韩av123| 国产精品无码专区在线观看| 国产偷亚洲偷欧美偷精品| 国产精品入口尤物| 一区二区三区天堂av| 国内精品久久久久久久| 欧美特级www| 国产亚洲一区精品| 国内成人精品视频| 乱亲女秽乱长久久久| 国产大片精品免费永久看nba| 国产成+人+综合+亚洲欧美丁香花| 欧美黄色三级网站| 欧美中文字幕在线观看| 青青久久aⅴ北条麻妃| 中文字幕欧美精品日韩中文字幕| 亚洲色图欧美制服丝袜另类第一页| 亚洲女人被黑人巨大进入al| 国产精品丝袜视频| 日韩高清免费观看| 亚洲激情视频在线观看| 国产性猛交xxxx免费看久久| 欧美午夜视频在线观看| 国产日韩欧美夫妻视频在线观看| 日韩中文字幕亚洲| 成人字幕网zmw| 欧美极品少妇全裸体| 国产精品久久久久久久久久小说| 欧美成人性生活| 92福利视频午夜1000合集在线观看| 青青精品视频播放| 中国日韩欧美久久久久久久久| 成人国产精品一区| 国产视频久久网| 日产精品99久久久久久| 亚洲系列中文字幕| 亚洲精品按摩视频| 成人免费午夜电影| 欧美性xxxx极品高清hd直播| 8x海外华人永久免费日韩内陆视频| 欧美一级淫片videoshd| 国产精品视频在线播放| 欧美亚洲国产另类| 欧美日韩精品中文字幕| 亚洲老头同性xxxxx| 亚洲欧美国产精品久久久久久久| 国产成人精品日本亚洲专区61| 久久成人免费视频| 日韩va亚洲va欧洲va国产| 久久久久国产精品www| 亚洲xxxx做受欧美| 久久伊人精品一区二区三区| 亚洲欧美福利视频| 国产精品99久久久久久白浆小说| 97人人做人人爱| 91亚洲精品久久久| 色婷婷av一区二区三区久久| 亚洲一区二区国产| 久久不射热爱视频精品| 久久久久北条麻妃免费看| 日韩国产精品亚洲а∨天堂免| 九色精品免费永久在线| 国产精品一区二区三区免费视频| 26uuu亚洲国产精品| 中文字幕精品久久| 国产精品99蜜臀久久不卡二区| 日韩精品一区二区三区第95| 亚洲男人的天堂在线播放| 亚洲男人的天堂网站| 欧美成人精品一区| 不卡av电影院| 精品无人区乱码1区2区3区在线| 日韩大陆欧美高清视频区| 国产精品一区二区三区久久| 国产欧美日韩高清| 亚洲国产精品中文| 欧美高清视频在线| 中文字幕免费精品一区| 国产精品免费久久久久影院| 欧美黄色免费网站| 欧美成人精品一区二区| 69久久夜色精品国产7777| 久久久视频免费观看| 中文国产亚洲喷潮| 国产女精品视频网站免费| 久久久精品视频成人| 日韩毛片中文字幕| 国产精品久久久久7777婷婷| 久久色精品视频| 成人午夜一级二级三级| 亚洲区在线播放| 欧美精品免费播放| 日韩一中文字幕| 午夜精品三级视频福利| 国产精品久久久久91| 91国产视频在线播放| 亚洲香蕉av在线一区二区三区| 精品日本美女福利在线观看| 日韩在线视频导航| 国产精品高潮呻吟久久av无限| 成人网在线免费看| 成人在线一区二区| 国产精品狠色婷| 亚洲a级在线播放观看| 国模精品系列视频| 91爱视频在线| 欧美日韩aaaa| 国产精品视频一| 亚洲免费视频一区二区| 日韩av免费在线| 91精品国产综合久久香蕉922| 欧美在线播放视频| 国内精品久久久久久久| 日韩美女免费观看| 国产精品海角社区在线观看| 日韩最新在线视频| 疯狂蹂躏欧美一区二区精品| 欧美国产亚洲精品久久久8v| 日韩一区在线视频| 91美女福利视频高清| 国产有码在线一区二区视频| 欧美精品在线观看| 日韩在线观看电影| 日本欧美在线视频| 国内精品在线一区| 成人黄色av免费在线观看| 91精品视频在线播放| 国产成人亚洲综合91| 久久国内精品一国内精品| 中文字幕亚洲综合久久筱田步美| 亚洲综合视频1区| 97人洗澡人人免费公开视频碰碰碰| 亚洲国产一区二区三区四区|