zoukankan      html  css  js  c++  java
  • 建立 CLR Stored Procedure/Function 的小範例

    SQL Server 2005 中, 直接叫用.NET組件是個很特別的功能; 它的使用時點在於當 SQL Program 無法快速有效率的處理我們想做的事, 而且.NET code可以做的比 SQL Program 好時, 我們可以在 SQL Program 中直接叫用 .NET組件中的類別方法, 這些Method必須是static, 這些Method可以被視為Function, Stored Procedure的方式來使用.

    以下是一連串的步驟, 說明建立的過程.

    1. 標示指定Method

    在想要成為CLR Function/Stored Procedure的Static Method上設定Attribute.

       1: using System;
       2: using System.Collections.Generic;
       3: using System.Text;
       4:  
       5: using Microsoft.SqlServer.Server;
       6:  
       7: namespace HowardCLRInSQLSample
       8: {
       9:     public class HelloCLR
      10:     {
      11:         [SqlFunctionAttribute(Name = "FN_Hello")]
      12:         public static string FN_Hello()
      13:         {
      14:             return "Hello, CLR Function In SQL !!";
      15:         }
      16:  
      17:         [SqlProcedureAttribute(Name = "SP_Hello")]
      18:         public static void SP_Hello()
      19:         {
      20:             SqlContext.Pipe.Send("Hello, CLR Stored Procedure In SQL !!");
      21:         }
      22:     }
      23: }

    2. SQL Server 環境建立

       1: -- 啟用SQL Server中的 CLR功能 (預設為關閉)
       2: -- 必須擁有 sysadmin 或 serveradmin 的權限才能啟用此功能
       3: sp_configure 'clr enabled', 1
       4: GO
       5: RECONFIGURE
       6: GO
       7:  
       8: -- 同時必須設定 指定db - Compatibility level -> 90 (即database為SQL Server 2005) 
       9: sp_dbcmptlevel OFD_POLARIS_CUR_EC, 90

    3. 註冊組件, 建立CLR Function/Stored Procedure

       1: -- 登錄組件 HowardCLRInSQLSample.dll
       2: -- 任何登錄之後的任何變動(re-build) 皆需重登錄
       3: IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'HowardCLRInSQLSample')
       4: DROP ASSEMBLY HowardCLRInSQLSample;
       5: GO
       6:  
       7: CREATE ASSEMBLY HowardCLRInSQLSample
       8: FROM 'H:\00 IT\Database\SQL Server\SQL 2005\clr in sql server\HowardCLRInSQLSample\HowardCLRInSQLSample\bin\Debug\HowardCLRInSQLSample.dll'
       9: WITH PERMISSION_SET = SAFE;
      10: GO
      11:  
      12: -- 可以用assembly_files來檢視組件的路徑
      13: select * from sys.assembly_files
      14:  
      15: -- 建立clr function
      16: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_Hello]') and xtype in (N'FN', N'IF', N'TF', N'FS'))
      17:     drop function [dbo].[FN_Hello]
      18: GO
      19:  
      20: CREATE FUNCTION [dbo].[FN_Hello] ()
      21: Returns  nvarchar(100)
      22: EXTERNAL NAME HowardCLRInSQLSample.[HowardCLRInSQLSample.HelloCLR].FN_Hello
      23:  
      24:  
      25: -- 建立clr sp
      26: IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = N'SP_Hello')
      27:     DROP PROCEDURE [dbo].[SP_Hello];
      28: GO
      29:  
      30: CREATE PROCEDURE [dbo].[SP_Hello]
      31: AS EXTERNAL NAME HowardCLRInSQLSample.[HowardCLRInSQLSample.HelloCLR].SP_Hello
      32: GO

    4.大功告成. 就如同使用一般function與stored procedure的方式.

       1: select [dbo].[FN_Hello]()
       2:  
       3: exec SP_Hello
    http://hi.baidu.com/thesum/blog/item/1417f9f9c9f1b65f252df29e.html
  • 相关阅读:
    深度学习GPU集群管理软件 OpenPAI 简介
    图片加数字盲水印
    Kubernetes核心概念简介
    一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)
    【OfficeWebViewer】在线预览Word,Excel~
    【Java】大文本字符串滤重的简单方案
    Java应用集群下的定时任务处理方案(mysql)
    《将博客搬至CSDN》
    [转]Fiddler抓取Android真机上的HTTPS包
    [Java Collection]List分组之简单应用.
  • 原文地址:https://www.cnblogs.com/chen110xi/p/2500950.html
Copyright © 2011-2022 走看看